Repository: deshaw/jupyterlab-execute-time (language: python)

Issue:
Use execution failure timing information
## References

Fixes https://github.com/deshaw/jupyterlab-execute-time/issues/84

Depends on https://github.com/jupyterlab/jupyterlab/pull/15285 which targets JupyterLab 4.1

## Code changes

- Aborts updates of live execution when new key `execution_failed` is detected in cell timing metadata 
- Adds new status to display when cell execution failed due to kernel restart

## User-facing changes

| Before | After |
|--------|--------|
| ![execute-before](https://github.com/jupyterlab/jupyterlab/assets/5832902/b1eb1628-0d0f-4cf5-9cdb-902b981ba0c6) | ![execute-after](https://github.com/jupyterlab/jupyterlab/assets/5832902/1214f257-8af5-415e-b26d-3f638d2d1cfd) | 
Fix font size of the execute time element
This issue arose due to jupyterlab removing dependence on blueprintjs which was setting the font size to `14px`. After removing blueprintjs, the new font size was being set to 80% of `--jp-ui-font-size1` whose value is 13px (jupyterlab/jupyterlab#12331)

I have reset the font size to the previous value to fix the readability issue.
Lab@4 Bug Windowed Notebooks
I can't fully explain what is happening, but something related to scrolling while running all cells during a restart and run all cells breaks this plugin in a way that only closing the notebook can fix.

![lab4-bug](https://github.com/deshaw/jupyterlab-execute-time/assets/1813603/09098b87-f7f3-4475-97ba-0ac253bae228)



Discussion / hints:
Marking as ready for review since https://github.com/jupyterlab/jupyterlab/pull/15285 got merged.



Fix patch:
diff --git a/.eslintignore b/.eslintignore
index 930a165..654cd50 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -2,4 +2,5 @@ node_modules
 dist
 coverage
 **/*.d.ts
-jupyterlab_execute_time
\ No newline at end of file
+jupyterlab_execute_time
+ui-tests
\ No newline at end of file
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 9240b03..0adb7b7 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -76,3 +76,68 @@ jobs:
         jupyter labextension list
         jupyter labextension list 2>&1 | grep -ie "jupyterlab-execute-time.*OK"
         python -m jupyterlab.browser_check --no-browser-test
+
+  integration-tests:
+    name: Integration tests
+    needs: build
+    runs-on: ubuntu-latest
+
+    env:
+      PLAYWRIGHT_BROWSERS_PATH: ${{ github.workspace }}/pw-browsers
+
+    steps:
+    - name: Checkout
+      uses: actions/checkout@v3
+
+    - name: Install node
+      uses: actions/setup-node@v3
+      with:
+       node-version: '18.x'
+
+    - name: Install Python
+      uses: actions/setup-python@v4
+      with:
+        python-version: '3.11'
+        architecture: 'x64'
+
+    - name: Download extension package
+      uses: actions/download-artifact@v3
+      with:
+        name: extension-artifacts
+
+    - name: Install the extension
+      run: |
+        set -eux
+        python -m pip install "jupyterlab>=4.0.0,<5" jupyterlab_execute_time*.whl
+
+    - name: Install dependencies
+      working-directory: ui-tests
+      env:
+        YARN_ENABLE_IMMUTABLE_INSTALLS: 0
+        PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
+      run: jlpm install
+
+    - name: Set up browser cache
+      uses: actions/cache@v3
+      with:
+        path: |
+          ${{ github.workspace }}/pw-browsers
+        key: ${{ runner.os }}-${{ hashFiles('ui-tests/yarn.lock') }}
+
+    - name: Install browser
+      run: jlpm playwright install chromium
+      working-directory: ui-tests
+
+    - name: Execute integration tests
+      working-directory: ui-tests
+      run: |
+        jlpm playwright test
+
+    - name: Upload Playwright Test report
+      if: always()
+      uses: actions/upload-artifact@v3
+      with:
+        name: jupyterlab_execute_time-playwright-tests
+        path: |
+          ui-tests/test-results
+          ui-tests/playwright-report
diff --git a/CHANGELOG.md b/CHANGELOG.md
index df6231d..e819d50 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,10 +9,11 @@
 ### Fixed
 
 - Font size of the execute time indicator [#103](https://github.com/deshaw/jupyterlab-execute-time/pull/103)
+- Fix node attachment issue with windowed notebook [#102](https://github.com/deshaw/jupyterlab-execute-time/pull/102)
 
-### Fixed
+### Maintenance
 
-- Fix node attachment issue with windowed notebook [#102](https://github.com/deshaw/jupyterlab-execute-time/pull/102)
+- Added UI/visual regression tests [#105](https://github.com/deshaw/jupyterlab-execute-time/pull/105)
 
 ## [3.0.1](https://github.com/deshaw/jupyterlab-execute-time/compare/v3.0.0...v3.0.1) (2023-08-02)
 


Test patch:
diff --git a/.github/workflows/update-integration-tests.yml b/.github/workflows/update-integration-tests.yml
new file mode 100644
index 0000000..7ea5a66
--- /dev/null
+++ b/.github/workflows/update-integration-tests.yml
@@ -0,0 +1,50 @@
+name: Update Playwright Snapshots
+
+on:
+  issue_comment:
+    types: [created, edited]
+
+permissions:
+  contents: write
+  pull-requests: write
+
+jobs:
+  update-snapshots:
+    if: ${{ github.event.issue.pull_request && contains(github.event.comment.body, 'please update snapshots') }}
+    runs-on: ubuntu-latest
+
+    steps:
+      - name: React to the triggering comment
+        run: |
+          gh api repos/${{ github.repository }}/issues/comments/${{ github.event.comment.id }}/reactions --raw-field 'content=+1'
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: Checkout
+        uses: actions/checkout@v4
+        with:
+          token: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: Checkout the branch from the PR that triggered the job
+        run: gh pr checkout ${{ github.event.issue.number }}
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: Base Setup
+        uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
+
+      - name: Install dependencies
+        run: python -m pip install -U "jupyterlab>=4.0.0,<5"
+
+      - name: Install extension
+        run: |
+          set -eux
+          jlpm
+          python -m pip install .
+
+      - uses: jupyterlab/maintainer-tools/.github/actions/update-snapshots@v1
+        with:
+          github_token: ${{ secrets.GITHUB_TOKEN }}
+          # Playwright knows how to start JupyterLab server
+          start_server_script: 'null'
+          test_folder: ui-tests
diff --git a/ui-tests/README.md b/ui-tests/README.md
new file mode 100644
index 0000000..8d377fc
--- /dev/null
+++ b/ui-tests/README.md
@@ -0,0 +1,167 @@
+# Integration Testing
+
+This folder contains the integration tests of the extension.
+
+They are defined using [Playwright](https://playwright.dev/docs/intro) test runner
+and [Galata](https://github.com/jupyterlab/jupyterlab/tree/main/galata) helper.
+
+The Playwright configuration is defined in [playwright.config.js](./playwright.config.js).
+
+The JupyterLab server configuration to use for the integration test is defined
+in [jupyter_server_test_config.py](./jupyter_server_test_config.py).
+
+The default configuration will produce video for failing tests and an HTML report.
+
+> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0).
+
+## Run the tests
+
+> All commands are assumed to be executed from the root directory
+
+To run the tests, you need to:
+
+1. Compile the extension:
+
+```sh
+jlpm install
+jlpm build:prod
+```
+
+> Check the extension is installed in JupyterLab.
+
+2. Install test dependencies (needed only once):
+
+```sh
+cd ./ui-tests
+jlpm install
+jlpm playwright install
+cd ..
+```
+
+3. Execute the [Playwright](https://playwright.dev/docs/intro) tests:
+
+```sh
+cd ./ui-tests
+jlpm playwright test
+```
+
+Test results will be shown in the terminal. In case of any test failures, the test report
+will be opened in your browser at the end of the tests execution; see
+[Playwright documentation](https://playwright.dev/docs/test-reporters#html-reporter)
+for configuring that behavior.
+
+## Update the tests snapshots
+
+> All commands are assumed to be executed from the root directory
+
+If you are comparing snapshots to validate your tests, you may need to update
+the reference snapshots stored in the repository. To do that, you need to:
+
+1. Compile the extension:
+
+```sh
+jlpm install
+jlpm build:prod
+```
+
+> Check the extension is installed in JupyterLab.
+
+2. Install test dependencies (needed only once):
+
+```sh
+cd ./ui-tests
+jlpm install
+jlpm playwright install
+cd ..
+```
+
+3. Execute the [Playwright](https://playwright.dev/docs/intro) command:
+
+```sh
+cd ./ui-tests
+jlpm playwright test -u
+```
+
+> Some discrepancy may occurs between the snapshots generated on your computer and
+> the one generated on the CI. To ease updating the snapshots on a PR, you can
+> type `please update playwright snapshots` to trigger the update by a bot on the CI.
+> Once the bot has computed new snapshots, it will commit them to the PR branch.
+
+## Create tests
+
+> All commands are assumed to be executed from the root directory
+
+To create tests, the easiest way is to use the code generator tool of playwright:
+
+1. Compile the extension:
+
+```sh
+jlpm install
+jlpm build:prod
+```
+
+> Check the extension is installed in JupyterLab.
+
+2. Install test dependencies (needed only once):
+
+```sh
+cd ./ui-tests
+jlpm install
+jlpm playwright install
+cd ..
+```
+
+3. Start the server:
+
+```sh
+cd ./ui-tests
+jlpm start
+```
+
+4. Execute the [Playwright code generator](https://playwright.dev/docs/codegen) in **another terminal**:
+
+```sh
+cd ./ui-tests
+jlpm playwright codegen localhost:8888
+```
+
+## Debug tests
+
+> All commands are assumed to be executed from the root directory
+
+To debug tests, a good way is to use the inspector tool of playwright:
+
+1. Compile the extension:
+
+```sh
+jlpm install
+jlpm build:prod
+```
+
+> Check the extension is installed in JupyterLab.
+
+2. Install test dependencies (needed only once):
+
+```sh
+cd ./ui-tests
+jlpm install
+jlpm playwright install
+cd ..
+```
+
+3. Execute the Playwright tests in [debug mode](https://playwright.dev/docs/debug):
+
+```sh
+cd ./ui-tests
+jlpm playwright test --debug
+```
+
+## Upgrade Playwright and the browsers
+
+To update the web browser versions, you must update the package `@playwright/test`:
+
+```sh
+cd ./ui-tests
+jlpm up "@playwright/test"
+jlpm playwright install
+```
diff --git a/ui-tests/jupyter_server_test_config.py b/ui-tests/jupyter_server_test_config.py
new file mode 100644
index 0000000..f2a9478
--- /dev/null
+++ b/ui-tests/jupyter_server_test_config.py
@@ -0,0 +1,12 @@
+"""Server configuration for integration tests.
+
+!! Never use this configuration in production because it
+opens the server to the world and provide access to JupyterLab
+JavaScript objects through the global window variable.
+"""
+from jupyterlab.galata import configure_jupyter_server
+
+configure_jupyter_server(c)
+
+# Uncomment to set server log level to debug level
+# c.ServerApp.log_level = "DEBUG"
diff --git a/ui-tests/notebooks/100_code_cells.ipynb b/ui-tests/notebooks/100_code_cells.ipynb
new file mode 100644
index 0000000..0975b77
--- /dev/null
+++ b/ui-tests/notebooks/100_code_cells.ipynb
@@ -0,0 +1,1836 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "c5347ad8-7ab6-4774-a320-41c1d89d1a41",
+   "metadata": {},
+   "source": [
+    "This notebook has 100 code cells and takes ~1 second to execute."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "id": "e3c2df25",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:49:59.682832Z",
+     "iopub.status.busy": "2023-11-04T13:49:59.682562Z",
+     "iopub.status.idle": "2023-11-04T13:49:59.694860Z",
+     "shell.execute_reply": "2023-11-04T13:49:59.693446Z",
+     "shell.execute_reply.started": "2023-11-04T13:49:59.682797Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "from time import sleep\n",
+    "\n",
+    "def f(i):\n",
+    "    sleep(0.01)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "id": "295a39c3",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:49:59.697623Z",
+     "iopub.status.busy": "2023-11-04T13:49:59.696668Z",
+     "iopub.status.idle": "2023-11-04T13:49:59.716920Z",
+     "shell.execute_reply": "2023-11-04T13:49:59.716301Z",
+     "shell.execute_reply.started": "2023-11-04T13:49:59.697594Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(2)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "id": "74030551",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:49:59.717941Z",
+     "iopub.status.busy": "2023-11-04T13:49:59.717717Z",
+     "iopub.status.idle": "2023-11-04T13:49:59.730735Z",
+     "shell.execute_reply": "2023-11-04T13:49:59.730081Z",
+     "shell.execute_reply.started": "2023-11-04T13:49:59.717917Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(3)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "id": "1eb42db0",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:49:59.731735Z",
+     "iopub.status.busy": "2023-11-04T13:49:59.731518Z",
+     "iopub.status.idle": "2023-11-04T13:49:59.744757Z",
+     "shell.execute_reply": "2023-11-04T13:49:59.743977Z",
+     "shell.execute_reply.started": "2023-11-04T13:49:59.731711Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(4)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "id": "7257bfa3",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:49:59.746111Z",
+     "iopub.status.busy": "2023-11-04T13:49:59.745782Z",
+     "iopub.status.idle": "2023-11-04T13:49:59.759361Z",
+     "shell.execute_reply": "2023-11-04T13:49:59.758470Z",
+     "shell.execute_reply.started": "2023-11-04T13:49:59.746074Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(5)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "id": "269a2b54",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:49:59.760678Z",
+     "iopub.status.busy": "2023-11-04T13:49:59.760377Z",
+     "iopub.status.idle": "2023-11-04T13:49:59.774401Z",
+     "shell.execute_reply": "2023-11-04T13:49:59.773298Z",
+     "shell.execute_reply.started": "2023-11-04T13:49:59.760638Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(6)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "id": "14d4b449",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:49:59.777996Z",
+     "iopub.status.busy": "2023-11-04T13:49:59.777760Z",
+     "iopub.status.idle": "2023-11-04T13:49:59.791232Z",
+     "shell.execute_reply": "2023-11-04T13:49:59.790447Z",
+     "shell.execute_reply.started": "2023-11-04T13:49:59.777972Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(7)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "id": "874364db",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:49:59.792552Z",
+     "iopub.status.busy": "2023-11-04T13:49:59.792260Z",
+     "iopub.status.idle": "2023-11-04T13:49:59.805914Z",
+     "shell.execute_reply": "2023-11-04T13:49:59.805079Z",
+     "shell.execute_reply.started": "2023-11-04T13:49:59.792518Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(8)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "id": "fceff67f",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:49:59.807363Z",
+     "iopub.status.busy": "2023-11-04T13:49:59.806890Z",
+     "iopub.status.idle": "2023-11-04T13:49:59.820207Z",
+     "shell.execute_reply": "2023-11-04T13:49:59.819570Z",
+     "shell.execute_reply.started": "2023-11-04T13:49:59.807335Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(9)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "id": "ca6d3e02",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:49:59.821745Z",
+     "iopub.status.busy": "2023-11-04T13:49:59.821518Z",
+     "iopub.status.idle": "2023-11-04T13:49:59.835119Z",
+     "shell.execute_reply": "2023-11-04T13:49:59.834129Z",
+     "shell.execute_reply.started": "2023-11-04T13:49:59.821723Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(10)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "id": "3a65b7b4",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:49:59.836281Z",
+     "iopub.status.busy": "2023-11-04T13:49:59.836011Z",
+     "iopub.status.idle": "2023-11-04T13:49:59.849454Z",
+     "shell.execute_reply": "2023-11-04T13:49:59.848719Z",
+     "shell.execute_reply.started": "2023-11-04T13:49:59.836256Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(11)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "id": "8bdb64d4",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:49:59.851883Z",
+     "iopub.status.busy": "2023-11-04T13:49:59.850914Z",
+     "iopub.status.idle": "2023-11-04T13:49:59.865334Z",
+     "shell.execute_reply": "2023-11-04T13:49:59.864448Z",
+     "shell.execute_reply.started": "2023-11-04T13:49:59.851853Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(12)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "id": "311a0b71",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:49:59.866978Z",
+     "iopub.status.busy": "2023-11-04T13:49:59.866381Z",
+     "iopub.status.idle": "2023-11-04T13:49:59.881119Z",
+     "shell.execute_reply": "2023-11-04T13:49:59.880101Z",
+     "shell.execute_reply.started": "2023-11-04T13:49:59.866946Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(13)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "id": "09f88f22",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:49:59.882335Z",
+     "iopub.status.busy": "2023-11-04T13:49:59.882065Z",
+     "iopub.status.idle": "2023-11-04T13:49:59.895270Z",
+     "shell.execute_reply": "2023-11-04T13:49:59.894589Z",
+     "shell.execute_reply.started": "2023-11-04T13:49:59.882306Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(14)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "id": "89a45ee5",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:49:59.896379Z",
+     "iopub.status.busy": "2023-11-04T13:49:59.896144Z",
+     "iopub.status.idle": "2023-11-04T13:49:59.909575Z",
+     "shell.execute_reply": "2023-11-04T13:49:59.908864Z",
+     "shell.execute_reply.started": "2023-11-04T13:49:59.896354Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(15)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "id": "d1fab684",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:49:59.910752Z",
+     "iopub.status.busy": "2023-11-04T13:49:59.910495Z",
+     "iopub.status.idle": "2023-11-04T13:49:59.924096Z",
+     "shell.execute_reply": "2023-11-04T13:49:59.923369Z",
+     "shell.execute_reply.started": "2023-11-04T13:49:59.910726Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(16)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "id": "e3ab2c9e",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:49:59.926061Z",
+     "iopub.status.busy": "2023-11-04T13:49:59.925452Z",
+     "iopub.status.idle": "2023-11-04T13:49:59.939445Z",
+     "shell.execute_reply": "2023-11-04T13:49:59.938694Z",
+     "shell.execute_reply.started": "2023-11-04T13:49:59.926034Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(17)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "id": "206a85da",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:49:59.941072Z",
+     "iopub.status.busy": "2023-11-04T13:49:59.940509Z",
+     "iopub.status.idle": "2023-11-04T13:49:59.954189Z",
+     "shell.execute_reply": "2023-11-04T13:49:59.953480Z",
+     "shell.execute_reply.started": "2023-11-04T13:49:59.941015Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(18)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "id": "f142ef41",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:49:59.955643Z",
+     "iopub.status.busy": "2023-11-04T13:49:59.955401Z",
+     "iopub.status.idle": "2023-11-04T13:49:59.968467Z",
+     "shell.execute_reply": "2023-11-04T13:49:59.967820Z",
+     "shell.execute_reply.started": "2023-11-04T13:49:59.955619Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(19)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 20,
+   "id": "386a10e8",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:49:59.970248Z",
+     "iopub.status.busy": "2023-11-04T13:49:59.969566Z",
+     "iopub.status.idle": "2023-11-04T13:49:59.983709Z",
+     "shell.execute_reply": "2023-11-04T13:49:59.983053Z",
+     "shell.execute_reply.started": "2023-11-04T13:49:59.970211Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(20)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 21,
+   "id": "8e23d292",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:49:59.985457Z",
+     "iopub.status.busy": "2023-11-04T13:49:59.984784Z",
+     "iopub.status.idle": "2023-11-04T13:49:59.999114Z",
+     "shell.execute_reply": "2023-11-04T13:49:59.998383Z",
+     "shell.execute_reply.started": "2023-11-04T13:49:59.985420Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(21)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "id": "e594a513",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.007510Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.007260Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.020471Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.019853Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.007486Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(22)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 23,
+   "id": "62eeafe7",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.022279Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.021979Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.035406Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.034728Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.022248Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(23)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 24,
+   "id": "1fb1b881",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.036599Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.036380Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.049559Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.048900Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.036577Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(24)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 25,
+   "id": "48c9197d",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.050787Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.050575Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.063802Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.062949Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.050764Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(25)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 26,
+   "id": "4be46d98",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.065015Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.064792Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.077964Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.077290Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.064991Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(26)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 27,
+   "id": "2fab3bfa",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.078987Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.078777Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.092146Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.091324Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.078965Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(27)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 28,
+   "id": "17ef4fe7",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.093371Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.093119Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.106532Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.105737Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.093347Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(28)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 29,
+   "id": "43615532",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.108082Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.107458Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.121561Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.120550Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.108048Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(29)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 30,
+   "id": "18a37619",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.122770Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.122549Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.135668Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.135002Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.122748Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(30)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 31,
+   "id": "3a53c2ed",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.136764Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.136547Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.149814Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.148952Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.136741Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(31)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 32,
+   "id": "4d8b10dd",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.151027Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.150731Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.164255Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.163380Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.150998Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(32)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 33,
+   "id": "5af04729",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.165510Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.165247Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.178325Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.177680Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.165485Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(33)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 34,
+   "id": "f655f69c",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.179508Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.179255Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.192505Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.191852Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.179482Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(34)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 35,
+   "id": "ba32a5c6",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.194121Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.193883Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.207243Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.206423Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.194097Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(35)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 36,
+   "id": "ee220335",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.209288Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.208233Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.223854Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.222540Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.209230Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(36)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 37,
+   "id": "b0a5c174",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.225954Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.225299Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.239549Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.238557Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.225919Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(37)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 38,
+   "id": "46a6d700",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.240972Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.240518Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.253909Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.253216Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.240717Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(38)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 39,
+   "id": "ccf44856",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.255439Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.254872Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.269046Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.268282Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.255402Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(39)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 40,
+   "id": "78c3b175",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.270840Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.270327Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.285985Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.285019Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.270805Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(40)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 41,
+   "id": "16de3b4c",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.287164Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.286941Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.300480Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.299740Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.287140Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(41)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 42,
+   "id": "a22cf62c",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.301579Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.301342Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.315392Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.314559Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.301554Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(42)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 43,
+   "id": "f0e2db05",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.317248Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.316518Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.330955Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.330050Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.317214Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(43)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 44,
+   "id": "61363dc4",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.332414Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.332082Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.346236Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.345422Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.332378Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(44)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 45,
+   "id": "37af9429",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.348408Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.348080Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.361849Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.361065Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.348371Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(45)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 46,
+   "id": "786fd431",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.363474Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.362825Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.376890Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.375926Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.363445Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(46)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 47,
+   "id": "d363d7c1",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.378139Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.377905Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.391985Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.390823Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.378116Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(47)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 48,
+   "id": "55d1d3dd",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.393747Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.393396Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.407186Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.406340Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.393710Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(48)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 49,
+   "id": "3fd5443d",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.408476Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.408196Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.421571Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.420785Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.408446Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(49)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 50,
+   "id": "fba20fe0",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.422883Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.422612Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.435874Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.435245Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.422857Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(50)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 51,
+   "id": "a7c48900",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.436906Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.436686Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.449999Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.449170Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.436883Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(51)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 52,
+   "id": "6285987d",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.451371Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.451008Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.464486Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.463715Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.451346Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(52)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 53,
+   "id": "ce05cf20",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.465972Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.465411Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.478912Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.478253Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.465946Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(53)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 54,
+   "id": "08c84aca",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.480018Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.479779Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.493175Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.492320Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.479994Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(54)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 55,
+   "id": "9547f5b6",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.494439Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.494193Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.507346Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.506656Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.494412Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(55)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 56,
+   "id": "d255015d",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.508802Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.508480Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.522035Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.521230Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.508768Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(56)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 57,
+   "id": "10d1525f",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.523064Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.522843Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.535856Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.535241Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.523041Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(57)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 58,
+   "id": "4cb9a37b",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.536930Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.536712Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.549954Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.549189Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.536908Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(58)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 59,
+   "id": "c704190f",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.551060Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.550835Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.564456Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.563405Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.551036Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(59)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 60,
+   "id": "51c2a0e6",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.565805Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.565559Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.579321Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.578473Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.565782Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(60)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 61,
+   "id": "148c9f07",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.580558Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.580304Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.593785Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.593045Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.580535Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(61)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 62,
+   "id": "065cdee3",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.595085Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.594835Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.608029Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.607366Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.595054Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(62)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 63,
+   "id": "c9f15d4b",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.609440Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.608923Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.622516Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.621852Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.609402Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(63)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 64,
+   "id": "d5e634aa",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.623618Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.623400Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.636360Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.635741Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.623597Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(64)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 65,
+   "id": "e4da78a9",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.637333Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.637110Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.650149Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.649415Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.637310Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(65)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 66,
+   "id": "5d9d2215",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.651467Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.651146Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.664262Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.663524Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.651443Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(66)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 67,
+   "id": "5dcc3039",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.674412Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.674175Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.687204Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.686467Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.674389Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(67)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 68,
+   "id": "9611ad89",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.689194Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.688206Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.702538Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.701794Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.689157Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(68)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 69,
+   "id": "6dad4b13",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.703900Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.703666Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.716788Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.715993Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.703877Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(69)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 70,
+   "id": "2a3d2d54",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.717976Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.717675Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.730920Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.730168Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.717942Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(70)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 71,
+   "id": "a32ea6ef",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.732078Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.731836Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.745889Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.745060Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.732053Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(71)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 72,
+   "id": "9c0478e2",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.746896Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.746634Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.765013Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.763888Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.746868Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(72)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 73,
+   "id": "263710b3",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.766313Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.766039Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.779981Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.778920Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.766282Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(73)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 74,
+   "id": "859590ec",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.781119Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.780828Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.794572Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.793631Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.781089Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(74)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 75,
+   "id": "acf9cab5",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.795645Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.795379Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.808600Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.807877Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.795615Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(75)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 76,
+   "id": "8f35db64",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.809742Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.809522Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.822863Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.822043Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.809720Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(76)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 77,
+   "id": "f651529f",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.823872Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.823608Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.837723Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.836581Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.823844Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(77)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 78,
+   "id": "4c84d27b",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.839396Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.839109Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.852841Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.852010Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.839365Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(78)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 79,
+   "id": "c2af5042",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.854489Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.853869Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.867522Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.866899Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.854456Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(79)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 80,
+   "id": "ff761045",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.868548Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.868328Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.881738Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.880738Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.868526Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(80)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 81,
+   "id": "aa4040b1",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.882847Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.882561Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.896123Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.895408Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.882817Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(81)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 82,
+   "id": "ab24041b",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.897812Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.897468Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.911639Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.910479Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.897775Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(82)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 83,
+   "id": "06e01d44",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.913011Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.912759Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.926046Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.925394Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.912987Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(83)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 84,
+   "id": "8f64cbad",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.927651Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.927351Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.940782Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.940084Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.927616Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(84)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 85,
+   "id": "d46c0db3",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.941977Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.941727Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.954810Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.954214Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.941945Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(85)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 86,
+   "id": "f6c6ae82",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.956186Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.955933Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.969229Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.968554Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.956160Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(86)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 87,
+   "id": "b26b347d",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.970273Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.970042Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.984288Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.983609Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.970249Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(87)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 88,
+   "id": "84f11847",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:00.985742Z",
+     "iopub.status.busy": "2023-11-04T13:50:00.985273Z",
+     "iopub.status.idle": "2023-11-04T13:50:00.998822Z",
+     "shell.execute_reply": "2023-11-04T13:50:00.998046Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:00.985715Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(88)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 89,
+   "id": "a5c72c4e",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:01.000251Z",
+     "iopub.status.busy": "2023-11-04T13:50:01.000028Z",
+     "iopub.status.idle": "2023-11-04T13:50:01.013298Z",
+     "shell.execute_reply": "2023-11-04T13:50:01.012578Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:01.000229Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(89)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 90,
+   "id": "6a5c1573",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:01.014417Z",
+     "iopub.status.busy": "2023-11-04T13:50:01.014184Z",
+     "iopub.status.idle": "2023-11-04T13:50:01.027466Z",
+     "shell.execute_reply": "2023-11-04T13:50:01.026617Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:01.014389Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(90)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 91,
+   "id": "6d22f181",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:01.028552Z",
+     "iopub.status.busy": "2023-11-04T13:50:01.028324Z",
+     "iopub.status.idle": "2023-11-04T13:50:01.041448Z",
+     "shell.execute_reply": "2023-11-04T13:50:01.040694Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:01.028529Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(91)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 92,
+   "id": "acbb88f3",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:01.042553Z",
+     "iopub.status.busy": "2023-11-04T13:50:01.042331Z",
+     "iopub.status.idle": "2023-11-04T13:50:01.055450Z",
+     "shell.execute_reply": "2023-11-04T13:50:01.054732Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:01.042531Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(92)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 93,
+   "id": "c01dc59e",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:01.056615Z",
+     "iopub.status.busy": "2023-11-04T13:50:01.056363Z",
+     "iopub.status.idle": "2023-11-04T13:50:01.069959Z",
+     "shell.execute_reply": "2023-11-04T13:50:01.069284Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:01.056591Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(93)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 94,
+   "id": "cb96979e",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:01.071153Z",
+     "iopub.status.busy": "2023-11-04T13:50:01.070861Z",
+     "iopub.status.idle": "2023-11-04T13:50:01.084368Z",
+     "shell.execute_reply": "2023-11-04T13:50:01.083686Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:01.071125Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(94)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 95,
+   "id": "35e3f049",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:01.085686Z",
+     "iopub.status.busy": "2023-11-04T13:50:01.085338Z",
+     "iopub.status.idle": "2023-11-04T13:50:01.099240Z",
+     "shell.execute_reply": "2023-11-04T13:50:01.098184Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:01.085662Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(95)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 96,
+   "id": "999b4d98",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:01.100412Z",
+     "iopub.status.busy": "2023-11-04T13:50:01.100155Z",
+     "iopub.status.idle": "2023-11-04T13:50:01.113596Z",
+     "shell.execute_reply": "2023-11-04T13:50:01.112686Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:01.100388Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(96)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 97,
+   "id": "0f99cf3b",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:01.115389Z",
+     "iopub.status.busy": "2023-11-04T13:50:01.115057Z",
+     "iopub.status.idle": "2023-11-04T13:50:01.128732Z",
+     "shell.execute_reply": "2023-11-04T13:50:01.127923Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:01.115354Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(97)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 98,
+   "id": "b14bd7a0",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:01.130025Z",
+     "iopub.status.busy": "2023-11-04T13:50:01.129790Z",
+     "iopub.status.idle": "2023-11-04T13:50:01.142974Z",
+     "shell.execute_reply": "2023-11-04T13:50:01.142162Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:01.130001Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(98)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 99,
+   "id": "b72fd71a",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:01.144110Z",
+     "iopub.status.busy": "2023-11-04T13:50:01.143886Z",
+     "iopub.status.idle": "2023-11-04T13:50:01.157301Z",
+     "shell.execute_reply": "2023-11-04T13:50:01.156475Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:01.144087Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(99)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 100,
+   "id": "742140f8",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-11-04T13:50:01.158435Z",
+     "iopub.status.busy": "2023-11-04T13:50:01.158211Z",
+     "iopub.status.idle": "2023-11-04T13:50:01.171851Z",
+     "shell.execute_reply": "2023-11-04T13:50:01.170785Z",
+     "shell.execute_reply.started": "2023-11-04T13:50:01.158411Z"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "f(100)"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.11.4"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/ui-tests/notebooks/Timing_outcomes.ipynb b/ui-tests/notebooks/Timing_outcomes.ipynb
new file mode 100644
index 0000000..08665ce
--- /dev/null
+++ b/ui-tests/notebooks/Timing_outcomes.ipynb
@@ -0,0 +1,93 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "98ce2d4e-e422-40ea-aa89-5adabbb8d0f0",
+   "metadata": {},
+   "source": [
+    "Notes:\n",
+    "- Each cells is self-contained to allow parallel testing.\n",
+    "- Cells were collected in one notebook to reduce notebook upload overhead.\n",
+    "- Cell indices are used in tests."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "4bf31c7c-ca89-421f-a617-4bba07d27054",
+   "metadata": {},
+   "source": [
+    "#### Execution started at (live progress, needs longer time):"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "2ab9d6c2-7963-490e-a1e9-f4190b099f47",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from time import sleep\n",
+    "sleep(5)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "f28cb5ea-94a4-47d3-9860-4cf20a29d690",
+   "metadata": {},
+   "source": [
+    "#### Last executed at:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "3cfa2867-8f80-4793-9a4d-d773b06136e1",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from time import sleep\n",
+    "sleep(0.01)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "09793dea-c9f9-40f1-8353-bfc34ba16242",
+   "metadata": {},
+   "source": [
+    "#### Failed:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "4d9d6725-090c-41df-8ca9-587af1f1bac7",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import os\n",
+    "os.system(f\"kill {os.getpid()}\")"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.11.4"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/ui-tests/package.json b/ui-tests/package.json
new file mode 100644
index 0000000..f229d51
--- /dev/null
+++ b/ui-tests/package.json
@@ -0,0 +1,15 @@
+{
+  "name": "jupyterlab-execute-time-ui-tests",
+  "version": "1.0.0",
+  "description": "JupyterLab jupyterlab-execute-time Integration Tests",
+  "private": true,
+  "scripts": {
+    "start": "jupyter lab --config jupyter_server_test_config.py",
+    "test": "jlpm playwright test",
+    "test:update": "jlpm playwright test --update-snapshots"
+  },
+  "devDependencies": {
+    "@jupyterlab/galata": "^5.0.5",
+    "@playwright/test": "^1.37.0"
+  }
+}
diff --git a/ui-tests/playwright.config.js b/ui-tests/playwright.config.js
new file mode 100644
index 0000000..e115377
--- /dev/null
+++ b/ui-tests/playwright.config.js
@@ -0,0 +1,14 @@
+/**
+ * Configuration for Playwright using default from @jupyterlab/galata
+ */
+const baseConfig = require('@jupyterlab/galata/lib/playwright-config');
+
+module.exports = {
+  ...baseConfig,
+  webServer: {
+    command: 'jlpm start',
+    url: 'http://localhost:8888/lab',
+    timeout: 120 * 1000,
+    reuseExistingServer: !process.env.CI,
+  },
+};
diff --git a/ui-tests/tests/timing_outcomes.spec.ts b/ui-tests/tests/timing_outcomes.spec.ts
new file mode 100644
index 0000000..daab138
--- /dev/null
+++ b/ui-tests/tests/timing_outcomes.spec.ts
@@ -0,0 +1,59 @@
+import { expect, galata, test } from '@jupyterlab/galata';
+import { openNotebook, cleanup, acceptDialog, maskedScreenshot } from './utils';
+
+const SETTINGS_ID = 'jupyterlab-execute-time:settings';
+
+test.describe('Timing outcomes', () => {
+  test.beforeEach(openNotebook('Timing_outcomes.ipynb'));
+  test.afterEach(cleanup);
+  // Disable flashing highlight for screenshot consistency
+  test.use({
+    mockSettings: {
+      ...galata.DEFAULT_SETTINGS,
+      [SETTINGS_ID]: {
+        ...galata.DEFAULT_SETTINGS[SETTINGS_ID],
+        highlight: false,
+      },
+    },
+  });
+
+  test('"Execution started at" state', async ({ page }) => {
+    const cell = await page.notebook.getCell(2);
+    // Start executing cell but do not wait for it to complete
+    await cell.click();
+    await page.keyboard.press('Control+Enter');
+
+    const widget = await cell.waitForSelector('.execute-time');
+    expect(await widget.textContent()).toContain('Execution started at');
+    expect(await maskedScreenshot(widget)).toMatchSnapshot(
+      'execution-started.png'
+    );
+  });
+
+  test('"Last executed at" state', async ({ page }) => {
+    const cell = await page.notebook.getCell(4);
+
+    // Execute cell and wait for it to complete
+    await page.notebook.runCell(4);
+
+    const widget = await cell.waitForSelector('.execute-time');
+    expect(await widget.textContent()).toContain('Last executed at');
+    expect(await maskedScreenshot(widget)).toMatchSnapshot('last-executed.png');
+  });
+
+  // Skipped for now as this requires JupyterLab 4.1.
+  test.skip('"Failed" state', async ({ page }) => {
+    const cell = await page.notebook.getCell(6);
+
+    // Execute cell manually without waiting for it to complete
+    await cell.click();
+    await page.keyboard.press('Control+Enter');
+
+    // Expect and accept a dialog confirming that kernel died (and restarted)
+    await acceptDialog(page, 'Kernel Restarting');
+
+    const widget = await cell.$('.execute-time');
+    expect(await widget.textContent()).toContain('Failed');
+    expect(await maskedScreenshot(widget)).toMatchSnapshot('failed.png');
+  });
+});
diff --git a/ui-tests/tests/timing_outcomes.spec.ts-snapshots/execution-started-linux.png b/ui-tests/tests/timing_outcomes.spec.ts-snapshots/execution-started-linux.png
new file mode 100644
index 0000000..2757c4e
Binary files /dev/null and b/ui-tests/tests/timing_outcomes.spec.ts-snapshots/execution-started-linux.png differ
diff --git a/ui-tests/tests/timing_outcomes.spec.ts-snapshots/last-executed-linux.png b/ui-tests/tests/timing_outcomes.spec.ts-snapshots/last-executed-linux.png
new file mode 100644
index 0000000..0a1ed94
Binary files /dev/null and b/ui-tests/tests/timing_outcomes.spec.ts-snapshots/last-executed-linux.png differ
diff --git a/ui-tests/tests/utils.ts b/ui-tests/tests/utils.ts
new file mode 100644
index 0000000..c429ca1
--- /dev/null
+++ b/ui-tests/tests/utils.ts
@@ -0,0 +1,65 @@
+import { Page, ElementHandle } from 'playwright';
+import * as path from 'path';
+
+/**
+ * Upload and open given notebook.
+ */
+export function openNotebook(fileName: string) {
+  return async ({ page, tmpPath }) => {
+    await page.contents.uploadFile(
+      path.resolve(__dirname, `../notebooks/${fileName}`),
+      `${tmpPath}/${fileName}`
+    );
+    await page.notebook.openByPath(`${tmpPath}/${fileName}`);
+    await page.notebook.activate(fileName);
+  };
+}
+
+/**
+ * Clean the temporary directory.
+ */
+export async function cleanup({ page, tmpPath }) {
+  await page.contents.deleteDirectory(tmpPath);
+}
+
+/**
+ * Accept the dialog which has the given title.
+ */
+export async function acceptDialog(page: Page, title: string) {
+  const dialog = await page.waitForSelector(`.jp-Dialog:has-text("${title}")`);
+  const button = await dialog.waitForSelector(
+    '.jp-Dialog-button.jp-mod-accept'
+  );
+  await button.click();
+  await dialog.waitForElementState('hidden');
+}
+
+/**
+ * Take a screenshot masking digits in the execute-time widget.
+ * The node will be temporarily cloned to allow taking a masked
+ * snapshot while the live execution timer is ticking.
+ */
+export async function maskedScreenshot(
+  widget: ElementHandle<HTMLElement | SVGElement>
+) {
+  // Clone the widget node and mask the digits.
+  const masked = (await widget.evaluateHandle(async (original) => {
+    const node = original.cloneNode(true) as HTMLElement;
+    node.querySelectorAll('span').forEach((span) => {
+      span.innerText = span.innerText.replace(/[0-9]/g, 'X');
+    });
+    // Fix width to avoid jitter
+    node.style.width = '500px';
+    // Make sure the copy is visible
+    node.style.zIndex = '1000';
+    node.style.position = 'absolute';
+    document.body.appendChild(node);
+    return node;
+  })) as ElementHandle<HTMLElement>;
+  const blob = await masked.screenshot({ timeout: 1000 });
+  // Clean up
+  await masked.evaluateHandle((node) => {
+    document.body.removeChild(node);
+  });
+  return blob;
+}
diff --git a/ui-tests/tests/windowed_notebook.spec.ts b/ui-tests/tests/windowed_notebook.spec.ts
new file mode 100644
index 0000000..45d5e88
--- /dev/null
+++ b/ui-tests/tests/windowed_notebook.spec.ts
@@ -0,0 +1,94 @@
+import { expect, galata, test } from '@jupyterlab/galata';
+import { openNotebook, acceptDialog, cleanup } from './utils';
+
+const SETTINGS_ID = 'jupyterlab-execute-time:settings';
+const NOTEBOOK_ID = '@jupyterlab/notebook-extension:tracker';
+
+test.describe('Windowed notebook', () => {
+  test.use({
+    mockSettings: {
+      ...galata.DEFAULT_SETTINGS,
+      [NOTEBOOK_ID]: {
+        ...galata.DEFAULT_SETTINGS[NOTEBOOK_ID],
+        windowingMode: 'full',
+      },
+    },
+  });
+  test.beforeEach(openNotebook('100_code_cells.ipynb'));
+  test.afterEach(cleanup);
+
+  test('Node attaches after scrolling into view', async ({ page }) => {
+    await page.notebook.run();
+    // Check that only a fraction of cells have the widget
+    expect(await page.locator('.execute-time').count()).toBeLessThan(50);
+    // Get the 100th cells locator without scrolling
+    const lastCellLocator = page.locator('.jp-Cell:last-child');
+    expect(await lastCellLocator.isHidden()).toBeTruthy();
+    const widgetLocator = lastCellLocator.locator('.execute-time');
+    expect(await widgetLocator.isHidden()).toBeTruthy();
+    // Scroll to the 100th cell
+    await page.notebook.getCell(100);
+    // The widget should not be shown
+    expect(await widgetLocator.isHidden()).toBeFalsy();
+    // The widget should be in "executed" state
+    expect(await widgetLocator.textContent()).toContain('Last executed at');
+  });
+});
+
+test.describe('Windowed notebook/hover', () => {
+  // The hover mode is useful for creating windowed notebook tests
+  // because in this mode execution does not move the notebook window.
+  test.use({
+    mockSettings: {
+      ...galata.DEFAULT_SETTINGS,
+      [NOTEBOOK_ID]: {
+        ...galata.DEFAULT_SETTINGS[NOTEBOOK_ID],
+        windowingMode: 'full',
+      },
+      [SETTINGS_ID]: {
+        ...galata.DEFAULT_SETTINGS[SETTINGS_ID],
+        positioning: 'hover',
+      },
+    },
+  });
+  test.beforeEach(openNotebook('100_code_cells.ipynb'));
+  test.afterEach(cleanup);
+
+  test('Only one node per cell is attached when scrolling', async ({
+    page,
+  }) => {
+    // Adjust timing to make the execution take 20 seconds total
+    await page.notebook.setCell(
+      1,
+      'code',
+      'from time import sleep\ndef f(i):\n    sleep(0.2)'
+    );
+    // Run cells
+    await page.evaluate(async () => {
+      await window.jupyterapp.commands.execute('notebook:run-all-cells');
+    });
+    // Count the visible cells
+    const visibleCells = await page.locator('.jp-CodeCell:visible').count();
+    // Wait until all visible cells have the widget
+    await page
+      .locator(`:nth-match(.execute-time, ${visibleCells})`)
+      .waitFor({ state: 'hidden' });
+    // Restart kernel and rerun cells
+    await page.evaluate(async () => {
+      window.jupyterapp.commands.execute('notebook:restart-run-all');
+    });
+    await acceptDialog(page, 'Restart Kernel?');
+    // Scroll up and down
+    for (let i = 0; i < 3; i++) {
+      // Scroll to the 100th cell
+      await page.notebook.getCell(100);
+      // Scroll to the 1st cell
+      await page.notebook.getCell(1);
+    }
+    // The number of visible widgets should be approximately equal the number of visible cells
+    // If multiple nodes were attached, the count would be equal to `3 * visibleCells`.
+    expect(await page.locator(`.execute-time`).count()).toBeLessThanOrEqual(
+      visibleCells + 2
+    );
+  });
+});
diff --git a/ui-tests/yarn.lock b/ui-tests/yarn.lock
new file mode 100644
index 0000000..5777458
--- /dev/null
+++ b/ui-tests/yarn.lock
@@ -0,0 +1,4120 @@
+# This file is generated by running "yarn install" inside your project.
+# Manual changes might be lost - proceed with caution!
+
+__metadata:
+  version: 6
+  cacheKey: 8
+
+"@codemirror/autocomplete@npm:^6.0.0, @codemirror/autocomplete@npm:^6.3.2, @codemirror/autocomplete@npm:^6.5.1, @codemirror/autocomplete@npm:^6.7.1":
+  version: 6.10.2
+  resolution: "@codemirror/autocomplete@npm:6.10.2"
+  dependencies:
+    "@codemirror/language": ^6.0.0
+    "@codemirror/state": ^6.0.0
+    "@codemirror/view": ^6.17.0
+    "@lezer/common": ^1.0.0
+  peerDependencies:
+    "@codemirror/language": ^6.0.0
+    "@codemirror/state": ^6.0.0
+    "@codemirror/view": ^6.0.0
+    "@lezer/common": ^1.0.0
+  checksum: 360cea6a87ae9c4e3c996903f636a8f47f8ea6cd44504181e69dd8ccf666bad3e8cc6d8935e0eedd8aa118fdfe86ea78f41bc15288f3a7517dbb87115e057563
+  languageName: node
+  linkType: hard
+
+"@codemirror/commands@npm:^6.2.3":
+  version: 6.3.0
+  resolution: "@codemirror/commands@npm:6.3.0"
+  dependencies:
+    "@codemirror/language": ^6.0.0
+    "@codemirror/state": ^6.2.0
+    "@codemirror/view": ^6.0.0
+    "@lezer/common": ^1.1.0
+  checksum: d6ade0ba7d4f80c2e44163935783d2f2f35c8b641a4b4f62452c0630211670abe5093786cf5a4af14147102d4284dae660a26f3ae58fd840e838685a81107d11
+  languageName: node
+  linkType: hard
+
+"@codemirror/lang-cpp@npm:^6.0.2":
+  version: 6.0.2
+  resolution: "@codemirror/lang-cpp@npm:6.0.2"
+  dependencies:
+    "@codemirror/language": ^6.0.0
+    "@lezer/cpp": ^1.0.0
+  checksum: bb9eba482cca80037ce30c7b193cf45eff19ccbb773764fddf2071756468ecc25aa53c777c943635054f89095b0247b9b50c339e107e41e68d34d12a7295f9a9
+  languageName: node
+  linkType: hard
+
+"@codemirror/lang-css@npm:^6.0.0, @codemirror/lang-css@npm:^6.1.1":
+  version: 6.2.1
+  resolution: "@codemirror/lang-css@npm:6.2.1"
+  dependencies:
+    "@codemirror/autocomplete": ^6.0.0
+    "@codemirror/language": ^6.0.0
+    "@codemirror/state": ^6.0.0
+    "@lezer/common": ^1.0.2
+    "@lezer/css": ^1.0.0
+  checksum: 5a8457ee8a4310030a969f2d3128429f549c4dc9b7907ee8888b42119c80b65af99093801432efdf659b8ec36a147d2a947bc1ecbbf69a759395214e3f4834a8
+  languageName: node
+  linkType: hard
+
+"@codemirror/lang-html@npm:^6.0.0, @codemirror/lang-html@npm:^6.4.3":
+  version: 6.4.6
+  resolution: "@codemirror/lang-html@npm:6.4.6"
+  dependencies:
+    "@codemirror/autocomplete": ^6.0.0
+    "@codemirror/lang-css": ^6.0.0
+    "@codemirror/lang-javascript": ^6.0.0
+    "@codemirror/language": ^6.4.0
+    "@codemirror/state": ^6.0.0
+    "@codemirror/view": ^6.17.0
+    "@lezer/common": ^1.0.0
+    "@lezer/css": ^1.1.0
+    "@lezer/html": ^1.3.0
+  checksum: 8f884f4423ffc783181ee933f7212ad4ece204695cf8af9535a593f95e901d36515a8561fc336a0fbcf5782369b9484eeb0d2cec2167622868238177c5e6eb36
+  languageName: node
+  linkType: hard
+
+"@codemirror/lang-java@npm:^6.0.1":
+  version: 6.0.1
+  resolution: "@codemirror/lang-java@npm:6.0.1"
+  dependencies:
+    "@codemirror/language": ^6.0.0
+    "@lezer/java": ^1.0.0
+  checksum: 4679104683cbffcd224ac04c7e5d144b787494697b26470b07017259035b7bb3fa62609d9a61bfbc566f1756d9f972f9f26d96a3c1362dd48881c1172f9a914d
+  languageName: node
+  linkType: hard
+
+"@codemirror/lang-javascript@npm:^6.0.0, @codemirror/lang-javascript@npm:^6.1.7":
+  version: 6.2.1
+  resolution: "@codemirror/lang-javascript@npm:6.2.1"
+  dependencies:
+    "@codemirror/autocomplete": ^6.0.0
+    "@codemirror/language": ^6.6.0
+    "@codemirror/lint": ^6.0.0
+    "@codemirror/state": ^6.0.0
+    "@codemirror/view": ^6.17.0
+    "@lezer/common": ^1.0.0
+    "@lezer/javascript": ^1.0.0
+  checksum: 3df38c4cced06195283a9a2a9365aaa7c8c1b157852b331bc3a118403f774bbba57d2a392de52f5e28d2b344a323bc0146bcf7c8ef8be2473f167d815e4a37cd
+  languageName: node
+  linkType: hard
+
+"@codemirror/lang-json@npm:^6.0.1":
+  version: 6.0.1
+  resolution: "@codemirror/lang-json@npm:6.0.1"
+  dependencies:
+    "@codemirror/language": ^6.0.0
+    "@lezer/json": ^1.0.0
+  checksum: e9e87d50ff7b81bd56a6ab50740b1dd54e9a93f1be585e1d59d0642e2148842ea1528ac7b7221eb4ddc7fe84bbc28065144cc3ab86f6e06c6aeb2d4b4e62acf1
+  languageName: node
+  linkType: hard
+
+"@codemirror/lang-markdown@npm:^6.1.1":
+  version: 6.2.2
+  resolution: "@codemirror/lang-markdown@npm:6.2.2"
+  dependencies:
+    "@codemirror/autocomplete": ^6.7.1
+    "@codemirror/lang-html": ^6.0.0
+    "@codemirror/language": ^6.3.0
+    "@codemirror/state": ^6.0.0
+    "@codemirror/view": ^6.0.0
+    "@lezer/common": ^1.0.0
+    "@lezer/markdown": ^1.0.0
+  checksum: 36aa82a4fc07e5761e0e04108b54f112f0049ed210b3d4e81b7429a99be4677a1f9ef0e004c5243265dca3bac36525792cb1558999f6a224c689475e958d4aa8
+  languageName: node
+  linkType: hard
+
+"@codemirror/lang-php@npm:^6.0.1":
+  version: 6.0.1
+  resolution: "@codemirror/lang-php@npm:6.0.1"
+  dependencies:
+    "@codemirror/lang-html": ^6.0.0
+    "@codemirror/language": ^6.0.0
+    "@codemirror/state": ^6.0.0
+    "@lezer/common": ^1.0.0
+    "@lezer/php": ^1.0.0
+  checksum: c003a29a426486453fdfddbf7302982fa2aa7f059bf6f1ce4cbf08341b0162eee5e2f50e0d71c418dcd358491631780156d846fe352754d042576172c5d86721
+  languageName: node
+  linkType: hard
+
+"@codemirror/lang-python@npm:^6.1.3":
+  version: 6.1.3
+  resolution: "@codemirror/lang-python@npm:6.1.3"
+  dependencies:
+    "@codemirror/autocomplete": ^6.3.2
+    "@codemirror/language": ^6.8.0
+    "@lezer/python": ^1.1.4
+  checksum: 65a0276a4503e4e3b70dd28d1c93ef472632b6d2c4bf3ae92d305d14ee8cf60b0bbbf62d5ceb51294de9598d9e2d42eafcde26f317ee7b90d0a11dfa863c1d1a
+  languageName: node
+  linkType: hard
+
+"@codemirror/lang-rust@npm:^6.0.1":
+  version: 6.0.1
+  resolution: "@codemirror/lang-rust@npm:6.0.1"
+  dependencies:
+    "@codemirror/language": ^6.0.0
+    "@lezer/rust": ^1.0.0
+  checksum: 8a439944cb22159b0b3465ca4fa4294c69843219d5d30e278ae6df8e48f30a7a9256129723c025ec9b5e694d31a3560fb004300b125ffcd81c22d13825845170
+  languageName: node
+  linkType: hard
+
+"@codemirror/lang-sql@npm:^6.4.1":
+  version: 6.5.4
+  resolution: "@codemirror/lang-sql@npm:6.5.4"
+  dependencies:
+    "@codemirror/autocomplete": ^6.0.0
+    "@codemirror/language": ^6.0.0
+    "@codemirror/state": ^6.0.0
+    "@lezer/highlight": ^1.0.0
+    "@lezer/lr": ^1.0.0
+  checksum: face21b0231ac5a7981949b5bf6a99ed092d0d6f7eb83f35dcd31d56ecf07dafa19d21623e0bad36cec7a12e3149df7b45c3588aeee31eae41e9b05942c4fdd7
+  languageName: node
+  linkType: hard
+
+"@codemirror/lang-wast@npm:^6.0.1":
+  version: 6.0.1
+  resolution: "@codemirror/lang-wast@npm:6.0.1"
+  dependencies:
+    "@codemirror/language": ^6.0.0
+    "@lezer/highlight": ^1.0.0
+    "@lezer/lr": ^1.0.0
+  checksum: 600d98d3ea6a4e99292244ed707e39a2abd9f3abf62cfeff5c819a0cc0c7e86b8c5b91e91c1b7ea21233d9ea09c41abe61d8a40b2547bb5db74239c6df857934
+  languageName: node
+  linkType: hard
+
+"@codemirror/lang-xml@npm:^6.0.2":
+  version: 6.0.2
+  resolution: "@codemirror/lang-xml@npm:6.0.2"
+  dependencies:
+    "@codemirror/autocomplete": ^6.0.0
+    "@codemirror/language": ^6.4.0
+    "@codemirror/state": ^6.0.0
+    "@lezer/common": ^1.0.0
+    "@lezer/xml": ^1.0.0
+  checksum: e156ecafaa87e9b6ef4ab6812ccd00d8f3c6cb81f232837636b36336d80513b61936dfee6f4f6800574f236208b61e95a2abcb997cdcd7366585a6b796e0e13b
+  languageName: node
+  linkType: hard
+
+"@codemirror/language@npm:^6.0.0, @codemirror/language@npm:^6.3.0, @codemirror/language@npm:^6.4.0, @codemirror/language@npm:^6.6.0, @codemirror/language@npm:^6.8.0":
+  version: 6.9.2
+  resolution: "@codemirror/language@npm:6.9.2"
+  dependencies:
+    "@codemirror/state": ^6.0.0
+    "@codemirror/view": ^6.0.0
+    "@lezer/common": ^1.1.0
+    "@lezer/highlight": ^1.0.0
+    "@lezer/lr": ^1.0.0
+    style-mod: ^4.0.0
+  checksum: eee7b861b5591114cac7502cd532d5b923639740081a4cd7e28696c252af8d759b14686aaf6d5eee7e0969ff647b7aaf03a5eea7235fb6d9858ee19433f1c74d
+  languageName: node
+  linkType: hard
+
+"@codemirror/legacy-modes@npm:^6.3.2":
+  version: 6.3.3
+  resolution: "@codemirror/legacy-modes@npm:6.3.3"
+  dependencies:
+    "@codemirror/language": ^6.0.0
+  checksum: 3cd32b0f011b0a193e0948e5901b625f38aa6d9a8b24344531d6e142eb6fbb3e6cb5969429102044f3d04fbe53c4deaebd9f659c05067a0b18d17766290c9e05
+  languageName: node
+  linkType: hard
+
+"@codemirror/lint@npm:^6.0.0":
+  version: 6.4.2
+  resolution: "@codemirror/lint@npm:6.4.2"
+  dependencies:
+    "@codemirror/state": ^6.0.0
+    "@codemirror/view": ^6.0.0
+    crelt: ^1.0.5
+  checksum: 5e699960c1b28dbaa584fe091a3201978907bf4b9e52810fb15d3ceaf310e38053435e0b594da0985266ae812039a5cd6c36023284a6f8568664bdca04db137f
+  languageName: node
+  linkType: hard
+
+"@codemirror/search@npm:^6.3.0":
+  version: 6.5.4
+  resolution: "@codemirror/search@npm:6.5.4"
+  dependencies:
+    "@codemirror/state": ^6.0.0
+    "@codemirror/view": ^6.0.0
+    crelt: ^1.0.5
+  checksum: 32a68e40486730949ee79f54b9fcc6c744559aef188d3c5bf82881f62e5fc9468fa21cf227507638160043c797eb054205802a649cf4a2350928fc161d5aac40
+  languageName: node
+  linkType: hard
+
+"@codemirror/state@npm:^6.0.0, @codemirror/state@npm:^6.1.4, @codemirror/state@npm:^6.2.0":
+  version: 6.3.1
+  resolution: "@codemirror/state@npm:6.3.1"
+  checksum: 8e7e55b3824653936606b31f146737459cb6654c935d668e7f36113ad523e1951966640f647c1286ae4ef22e3f0c7e37a6dfcbbcdb7bbeacca43c17c80fcc918
+  languageName: node
+  linkType: hard
+
+"@codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.17.0, @codemirror/view@npm:^6.9.6":
+  version: 6.22.0
+  resolution: "@codemirror/view@npm:6.22.0"
+  dependencies:
+    "@codemirror/state": ^6.1.4
+    style-mod: ^4.1.0
+    w3c-keyname: ^2.2.4
+  checksum: 2a24674687fbde06898d0a131abe5f86a812d79e111cf8dc94110dac86eed8c20a2094b547c1b3c379fe8edf0c66318d03a7594158e4f6628ee060a03a5d1bab
+  languageName: node
+  linkType: hard
+
+"@fortawesome/fontawesome-free@npm:^5.12.0":
+  version: 5.15.4
+  resolution: "@fortawesome/fontawesome-free@npm:5.15.4"
+  checksum: 32281c3df4075290d9a96dfc22f72fadb3da7055d4117e48d34046b8c98032a55fa260ae351b0af5d6f6fb57a2f5d79a4abe52af456da35195f7cb7dda27b4a2
+  languageName: node
+  linkType: hard
+
+"@isaacs/cliui@npm:^8.0.2":
+  version: 8.0.2
+  resolution: "@isaacs/cliui@npm:8.0.2"
+  dependencies:
+    string-width: ^5.1.2
+    string-width-cjs: "npm:string-width@^4.2.0"
+    strip-ansi: ^7.0.1
+    strip-ansi-cjs: "npm:strip-ansi@^6.0.1"
+    wrap-ansi: ^8.1.0
+    wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0"
+  checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb
+  languageName: node
+  linkType: hard
+
+"@jupyter/ydoc@npm:^1.0.2":
+  version: 1.1.1
+  resolution: "@jupyter/ydoc@npm:1.1.1"
+  dependencies:
+    "@jupyterlab/nbformat": ^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0
+    "@lumino/coreutils": ^1.11.0 || ^2.0.0
+    "@lumino/disposable": ^1.10.0 || ^2.0.0
+    "@lumino/signaling": ^1.10.0 || ^2.0.0
+    y-protocols: ^1.0.5
+    yjs: ^13.5.40
+  checksum: a239b1dd57cfc9ba36c06ac5032a1b6388849ae01a1d0db0d45094f71fdadf4d473b4bf8becbef0cfcdc85cae505361fbec0822b02da5aa48e06b66f742dd7a0
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/application@npm:^4.0.8":
+  version: 4.0.8
+  resolution: "@jupyterlab/application@npm:4.0.8"
+  dependencies:
+    "@fortawesome/fontawesome-free": ^5.12.0
+    "@jupyterlab/apputils": ^4.1.8
+    "@jupyterlab/coreutils": ^6.0.8
+    "@jupyterlab/docregistry": ^4.0.8
+    "@jupyterlab/rendermime": ^4.0.8
+    "@jupyterlab/rendermime-interfaces": ^3.8.8
+    "@jupyterlab/services": ^7.0.8
+    "@jupyterlab/statedb": ^4.0.8
+    "@jupyterlab/translation": ^4.0.8
+    "@jupyterlab/ui-components": ^4.0.8
+    "@lumino/algorithm": ^2.0.1
+    "@lumino/application": ^2.2.1
+    "@lumino/commands": ^2.1.3
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/disposable": ^2.1.2
+    "@lumino/messaging": ^2.0.1
+    "@lumino/polling": ^2.1.2
+    "@lumino/properties": ^2.0.1
+    "@lumino/signaling": ^2.1.2
+    "@lumino/widgets": ^2.3.0
+  checksum: e6c50720992d50f8d6151752a31bf8dda2a21e912e896bbe9037f72086bddb515836fb9554603df8773313b27f45a39e01bda7e7b75cb2aca70ef15bcae1bc5e
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/apputils@npm:^4.1.8":
+  version: 4.1.8
+  resolution: "@jupyterlab/apputils@npm:4.1.8"
+  dependencies:
+    "@jupyterlab/coreutils": ^6.0.8
+    "@jupyterlab/observables": ^5.0.8
+    "@jupyterlab/rendermime-interfaces": ^3.8.8
+    "@jupyterlab/services": ^7.0.8
+    "@jupyterlab/settingregistry": ^4.0.8
+    "@jupyterlab/statedb": ^4.0.8
+    "@jupyterlab/statusbar": ^4.0.8
+    "@jupyterlab/translation": ^4.0.8
+    "@jupyterlab/ui-components": ^4.0.8
+    "@lumino/algorithm": ^2.0.1
+    "@lumino/commands": ^2.1.3
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/disposable": ^2.1.2
+    "@lumino/domutils": ^2.0.1
+    "@lumino/messaging": ^2.0.1
+    "@lumino/signaling": ^2.1.2
+    "@lumino/virtualdom": ^2.0.1
+    "@lumino/widgets": ^2.3.0
+    "@types/react": ^18.0.26
+    react: ^18.2.0
+    sanitize-html: ~2.7.3
+  checksum: 1b028893ac0358d9f90585edd5fbb89a4fe251c31789cf6d809fb316b91c958c6ba33884d463dbe78dfdd864b579535e1e1849bcb9b16853002271a71418d31e
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/attachments@npm:^4.0.8":
+  version: 4.0.8
+  resolution: "@jupyterlab/attachments@npm:4.0.8"
+  dependencies:
+    "@jupyterlab/nbformat": ^4.0.8
+    "@jupyterlab/observables": ^5.0.8
+    "@jupyterlab/rendermime": ^4.0.8
+    "@jupyterlab/rendermime-interfaces": ^3.8.8
+    "@lumino/disposable": ^2.1.2
+    "@lumino/signaling": ^2.1.2
+  checksum: 17e14257fb28006144bd7824e9f78e5c4c792c9dfa60e67efdd0bb6e6e33109b52e1e10b18d8a76f4d8e5e8d4ab9a22254e92f13d8c8f9ed0803961f5de8ece0
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/cells@npm:^4.0.8":
+  version: 4.0.8
+  resolution: "@jupyterlab/cells@npm:4.0.8"
+  dependencies:
+    "@codemirror/state": ^6.2.0
+    "@codemirror/view": ^6.9.6
+    "@jupyter/ydoc": ^1.0.2
+    "@jupyterlab/apputils": ^4.1.8
+    "@jupyterlab/attachments": ^4.0.8
+    "@jupyterlab/codeeditor": ^4.0.8
+    "@jupyterlab/codemirror": ^4.0.8
+    "@jupyterlab/coreutils": ^6.0.8
+    "@jupyterlab/documentsearch": ^4.0.8
+    "@jupyterlab/filebrowser": ^4.0.8
+    "@jupyterlab/nbformat": ^4.0.8
+    "@jupyterlab/observables": ^5.0.8
+    "@jupyterlab/outputarea": ^4.0.8
+    "@jupyterlab/rendermime": ^4.0.8
+    "@jupyterlab/services": ^7.0.8
+    "@jupyterlab/toc": ^6.0.8
+    "@jupyterlab/translation": ^4.0.8
+    "@jupyterlab/ui-components": ^4.0.8
+    "@lumino/algorithm": ^2.0.1
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/domutils": ^2.0.1
+    "@lumino/dragdrop": ^2.1.3
+    "@lumino/messaging": ^2.0.1
+    "@lumino/polling": ^2.1.2
+    "@lumino/signaling": ^2.1.2
+    "@lumino/virtualdom": ^2.0.1
+    "@lumino/widgets": ^2.3.0
+    react: ^18.2.0
+  checksum: 42e4464574a603f48df299ccf2d84bf5f90f0aa39b0a9c680c9db5d254b416ee784ec3b5a1475ed72a10e6dcf1075715d66bf3afeee55e365c42656daea3f002
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/codeeditor@npm:^4.0.8":
+  version: 4.0.8
+  resolution: "@jupyterlab/codeeditor@npm:4.0.8"
+  dependencies:
+    "@codemirror/state": ^6.2.0
+    "@jupyter/ydoc": ^1.0.2
+    "@jupyterlab/coreutils": ^6.0.8
+    "@jupyterlab/nbformat": ^4.0.8
+    "@jupyterlab/observables": ^5.0.8
+    "@jupyterlab/statusbar": ^4.0.8
+    "@jupyterlab/translation": ^4.0.8
+    "@jupyterlab/ui-components": ^4.0.8
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/disposable": ^2.1.2
+    "@lumino/dragdrop": ^2.1.3
+    "@lumino/messaging": ^2.0.1
+    "@lumino/signaling": ^2.1.2
+    "@lumino/widgets": ^2.3.0
+    react: ^18.2.0
+  checksum: 151be40c60bcedf463d01b9c53466afc4b4747dd341fb4d5c2b9fc8b3c181af2ba391f867e10e78bb948848cdd300139b4b112634dec9f8aac9c36c5a13e1654
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/codemirror@npm:^4.0.8":
+  version: 4.0.8
+  resolution: "@jupyterlab/codemirror@npm:4.0.8"
+  dependencies:
+    "@codemirror/autocomplete": ^6.5.1
+    "@codemirror/commands": ^6.2.3
+    "@codemirror/lang-cpp": ^6.0.2
+    "@codemirror/lang-css": ^6.1.1
+    "@codemirror/lang-html": ^6.4.3
+    "@codemirror/lang-java": ^6.0.1
+    "@codemirror/lang-javascript": ^6.1.7
+    "@codemirror/lang-json": ^6.0.1
+    "@codemirror/lang-markdown": ^6.1.1
+    "@codemirror/lang-php": ^6.0.1
+    "@codemirror/lang-python": ^6.1.3
+    "@codemirror/lang-rust": ^6.0.1
+    "@codemirror/lang-sql": ^6.4.1
+    "@codemirror/lang-wast": ^6.0.1
+    "@codemirror/lang-xml": ^6.0.2
+    "@codemirror/language": ^6.6.0
+    "@codemirror/legacy-modes": ^6.3.2
+    "@codemirror/search": ^6.3.0
+    "@codemirror/state": ^6.2.0
+    "@codemirror/view": ^6.9.6
+    "@jupyter/ydoc": ^1.0.2
+    "@jupyterlab/codeeditor": ^4.0.8
+    "@jupyterlab/coreutils": ^6.0.8
+    "@jupyterlab/documentsearch": ^4.0.8
+    "@jupyterlab/nbformat": ^4.0.8
+    "@jupyterlab/translation": ^4.0.8
+    "@lezer/common": ^1.0.2
+    "@lezer/generator": ^1.2.2
+    "@lezer/highlight": ^1.1.4
+    "@lezer/markdown": ^1.0.2
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/disposable": ^2.1.2
+    "@lumino/signaling": ^2.1.2
+    yjs: ^13.5.40
+  checksum: 2edd2ac9d695f8107d444379289b4cecf3603c118d748608738abe2a1af9d311d0407c5709ccbe016dd0a16c3a52d7f0132446173678246841c8ddf8ade371c7
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/console@npm:^4.0.8":
+  version: 4.0.8
+  resolution: "@jupyterlab/console@npm:4.0.8"
+  dependencies:
+    "@codemirror/state": ^6.2.0
+    "@codemirror/view": ^6.9.6
+    "@jupyter/ydoc": ^1.0.2
+    "@jupyterlab/apputils": ^4.1.8
+    "@jupyterlab/cells": ^4.0.8
+    "@jupyterlab/codeeditor": ^4.0.8
+    "@jupyterlab/coreutils": ^6.0.8
+    "@jupyterlab/nbformat": ^4.0.8
+    "@jupyterlab/observables": ^5.0.8
+    "@jupyterlab/rendermime": ^4.0.8
+    "@jupyterlab/services": ^7.0.8
+    "@jupyterlab/translation": ^4.0.8
+    "@jupyterlab/ui-components": ^4.0.8
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/disposable": ^2.1.2
+    "@lumino/dragdrop": ^2.1.3
+    "@lumino/messaging": ^2.0.1
+    "@lumino/signaling": ^2.1.2
+    "@lumino/widgets": ^2.3.0
+  checksum: 0d8461167377dfecd9d42427c1941fa932877ceae839d6c7043a690e71a675f7e1979c49bb1b1c7124bfe74f3351d5ff35845c6e9585f8e79fa9221f7ad74a54
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/coreutils@npm:^6.0.8":
+  version: 6.0.8
+  resolution: "@jupyterlab/coreutils@npm:6.0.8"
+  dependencies:
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/disposable": ^2.1.2
+    "@lumino/signaling": ^2.1.2
+    minimist: ~1.2.0
+    path-browserify: ^1.0.0
+    url-parse: ~1.5.4
+  checksum: b56e3b95c0ce52745b79549ef5b18a27e620086b87cf997b3a743b59d18dc529e403c812751b7e294a4abc60ac957381301e14327e1a4b9c1afb232f181f3a4d
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/debugger@npm:^4.0.8":
+  version: 4.0.8
+  resolution: "@jupyterlab/debugger@npm:4.0.8"
+  dependencies:
+    "@codemirror/state": ^6.2.0
+    "@codemirror/view": ^6.9.6
+    "@jupyter/ydoc": ^1.0.2
+    "@jupyterlab/application": ^4.0.8
+    "@jupyterlab/apputils": ^4.1.8
+    "@jupyterlab/cells": ^4.0.8
+    "@jupyterlab/codeeditor": ^4.0.8
+    "@jupyterlab/codemirror": ^4.0.8
+    "@jupyterlab/console": ^4.0.8
+    "@jupyterlab/coreutils": ^6.0.8
+    "@jupyterlab/docregistry": ^4.0.8
+    "@jupyterlab/fileeditor": ^4.0.8
+    "@jupyterlab/notebook": ^4.0.8
+    "@jupyterlab/observables": ^5.0.8
+    "@jupyterlab/rendermime": ^4.0.8
+    "@jupyterlab/services": ^7.0.8
+    "@jupyterlab/translation": ^4.0.8
+    "@jupyterlab/ui-components": ^4.0.8
+    "@lumino/algorithm": ^2.0.1
+    "@lumino/commands": ^2.1.3
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/datagrid": ^2.2.0
+    "@lumino/disposable": ^2.1.2
+    "@lumino/messaging": ^2.0.1
+    "@lumino/polling": ^2.1.2
+    "@lumino/signaling": ^2.1.2
+    "@lumino/widgets": ^2.3.0
+    "@vscode/debugprotocol": ^1.51.0
+    react: ^18.2.0
+  checksum: 54d9f065f22f355e13300ba4578c328f715148faee855a62794c8f2f1662f6ef6e74e8133a524d16b6feede8a765efaad1d3c9dcb2178f238da913601c4e7535
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/docmanager@npm:^4.0.8":
+  version: 4.0.8
+  resolution: "@jupyterlab/docmanager@npm:4.0.8"
+  dependencies:
+    "@jupyterlab/apputils": ^4.1.8
+    "@jupyterlab/coreutils": ^6.0.8
+    "@jupyterlab/docregistry": ^4.0.8
+    "@jupyterlab/services": ^7.0.8
+    "@jupyterlab/statusbar": ^4.0.8
+    "@jupyterlab/translation": ^4.0.8
+    "@jupyterlab/ui-components": ^4.0.8
+    "@lumino/algorithm": ^2.0.1
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/disposable": ^2.1.2
+    "@lumino/messaging": ^2.0.1
+    "@lumino/properties": ^2.0.1
+    "@lumino/signaling": ^2.1.2
+    "@lumino/widgets": ^2.3.0
+    react: ^18.2.0
+  checksum: 70eea965bb9edd6a4042c92d2cb98f8b1b145b6727a354e12e3f5ab84ff2ab7207c5d9433c43c03d01f4377f9dc901359d789d0f47d2c725e56f41c487295550
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/docregistry@npm:^4.0.8":
+  version: 4.0.8
+  resolution: "@jupyterlab/docregistry@npm:4.0.8"
+  dependencies:
+    "@jupyter/ydoc": ^1.0.2
+    "@jupyterlab/apputils": ^4.1.8
+    "@jupyterlab/codeeditor": ^4.0.8
+    "@jupyterlab/coreutils": ^6.0.8
+    "@jupyterlab/observables": ^5.0.8
+    "@jupyterlab/rendermime": ^4.0.8
+    "@jupyterlab/rendermime-interfaces": ^3.8.8
+    "@jupyterlab/services": ^7.0.8
+    "@jupyterlab/translation": ^4.0.8
+    "@jupyterlab/ui-components": ^4.0.8
+    "@lumino/algorithm": ^2.0.1
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/disposable": ^2.1.2
+    "@lumino/messaging": ^2.0.1
+    "@lumino/properties": ^2.0.1
+    "@lumino/signaling": ^2.1.2
+    "@lumino/widgets": ^2.3.0
+  checksum: 280697f97ca146cc711c5dafa1b27eaa89d96bc53fc92ade7d4b78c44c997feb9d2495b392c31e75ed3c836797865e2f3fa6ea8f3207f46a4ab2d26061dc9498
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/documentsearch@npm:^4.0.8":
+  version: 4.0.8
+  resolution: "@jupyterlab/documentsearch@npm:4.0.8"
+  dependencies:
+    "@jupyterlab/apputils": ^4.1.8
+    "@jupyterlab/translation": ^4.0.8
+    "@jupyterlab/ui-components": ^4.0.8
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/disposable": ^2.1.2
+    "@lumino/messaging": ^2.0.1
+    "@lumino/polling": ^2.1.2
+    "@lumino/signaling": ^2.1.2
+    "@lumino/widgets": ^2.3.0
+    react: ^18.2.0
+  checksum: 5ee4c4b910af158b4ca488c617b12b2a84d391cfb6be94a38136a1eb80f639ec4b446fd862748a76732bc3eccd290750c0e9f6b6211d3c15d0776073173a5343
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/filebrowser@npm:^4.0.8":
+  version: 4.0.8
+  resolution: "@jupyterlab/filebrowser@npm:4.0.8"
+  dependencies:
+    "@jupyterlab/apputils": ^4.1.8
+    "@jupyterlab/coreutils": ^6.0.8
+    "@jupyterlab/docmanager": ^4.0.8
+    "@jupyterlab/docregistry": ^4.0.8
+    "@jupyterlab/services": ^7.0.8
+    "@jupyterlab/statedb": ^4.0.8
+    "@jupyterlab/statusbar": ^4.0.8
+    "@jupyterlab/translation": ^4.0.8
+    "@jupyterlab/ui-components": ^4.0.8
+    "@lumino/algorithm": ^2.0.1
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/disposable": ^2.1.2
+    "@lumino/domutils": ^2.0.1
+    "@lumino/dragdrop": ^2.1.3
+    "@lumino/messaging": ^2.0.1
+    "@lumino/polling": ^2.1.2
+    "@lumino/signaling": ^2.1.2
+    "@lumino/virtualdom": ^2.0.1
+    "@lumino/widgets": ^2.3.0
+    react: ^18.2.0
+  checksum: 907dade3b9ab6bde667cdf2acc76c0fb2d631c06d794115a456cb6b1995a3b89b2a9f5c53a75824b337833cd05967c55fd919ca1311f24279aa5f067f948378a
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/fileeditor@npm:^4.0.8":
+  version: 4.0.8
+  resolution: "@jupyterlab/fileeditor@npm:4.0.8"
+  dependencies:
+    "@jupyterlab/apputils": ^4.1.8
+    "@jupyterlab/codeeditor": ^4.0.8
+    "@jupyterlab/codemirror": ^4.0.8
+    "@jupyterlab/coreutils": ^6.0.8
+    "@jupyterlab/docregistry": ^4.0.8
+    "@jupyterlab/documentsearch": ^4.0.8
+    "@jupyterlab/lsp": ^4.0.8
+    "@jupyterlab/statusbar": ^4.0.8
+    "@jupyterlab/toc": ^6.0.8
+    "@jupyterlab/translation": ^4.0.8
+    "@jupyterlab/ui-components": ^4.0.8
+    "@lumino/commands": ^2.1.3
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/messaging": ^2.0.1
+    "@lumino/widgets": ^2.3.0
+    react: ^18.2.0
+    regexp-match-indices: ^1.0.2
+  checksum: 0e31402e889f5519a380ab62f46efaff6787be03736daec46d4608f127a9335304963e2a20f37a3269a4aec7d358eee70a01fe8446968f0df96711b9e9cb9123
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/galata@npm:^5.0.5":
+  version: 5.0.8
+  resolution: "@jupyterlab/galata@npm:5.0.8"
+  dependencies:
+    "@jupyterlab/application": ^4.0.8
+    "@jupyterlab/apputils": ^4.1.8
+    "@jupyterlab/coreutils": ^6.0.8
+    "@jupyterlab/debugger": ^4.0.8
+    "@jupyterlab/docmanager": ^4.0.8
+    "@jupyterlab/nbformat": ^4.0.8
+    "@jupyterlab/notebook": ^4.0.8
+    "@jupyterlab/services": ^7.0.8
+    "@jupyterlab/settingregistry": ^4.0.8
+    "@lumino/coreutils": ^2.1.2
+    "@playwright/test": ^1.32.2
+    "@stdlib/stats": ~0.0.13
+    fs-extra: ^10.1.0
+    json5: ^2.2.3
+    path: ~0.12.7
+    systeminformation: ^5.8.6
+    vega: ^5.20.0
+    vega-lite: ^5.6.1
+    vega-statistics: ^1.7.9
+  checksum: 7874d8e54abb3d449e0a3962726101738e40a760ee047f20485567113bb2fc76d43f9d9e86c84a7b7a72dd8e0ae32c3f62a8ad025336b95f42bc3c89a547a7b5
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/lsp@npm:^4.0.8":
+  version: 4.0.8
+  resolution: "@jupyterlab/lsp@npm:4.0.8"
+  dependencies:
+    "@jupyterlab/apputils": ^4.1.8
+    "@jupyterlab/codeeditor": ^4.0.8
+    "@jupyterlab/coreutils": ^6.0.8
+    "@jupyterlab/docregistry": ^4.0.8
+    "@jupyterlab/services": ^7.0.8
+    "@jupyterlab/translation": ^4.0.8
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/disposable": ^2.1.2
+    "@lumino/signaling": ^2.1.2
+    lodash.mergewith: ^4.6.1
+    vscode-jsonrpc: ^6.0.0
+    vscode-languageserver-protocol: ^3.17.0
+    vscode-ws-jsonrpc: ~1.0.2
+  checksum: baf2d42800a617a9d06d8cbb9c755e0cc40994c25c7c5d31bca1b7ac4fc4ad67d77fadb53de020e52d499a46e41dea1d84abb388b9bc20d468a5e888c687f301
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/nbformat@npm:^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0, @jupyterlab/nbformat@npm:^4.0.8":
+  version: 4.0.8
+  resolution: "@jupyterlab/nbformat@npm:4.0.8"
+  dependencies:
+    "@lumino/coreutils": ^2.1.2
+  checksum: 2d8255ac7c7c20dbfa8497ce4d8d2f5840568adefb2feaec8eb8ddbb4892f50706ce60e8c4719113485c5523f720802f7e4e7b63ed43fac90f870ff1134bed7a
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/notebook@npm:^4.0.8":
+  version: 4.0.8
+  resolution: "@jupyterlab/notebook@npm:4.0.8"
+  dependencies:
+    "@jupyter/ydoc": ^1.0.2
+    "@jupyterlab/apputils": ^4.1.8
+    "@jupyterlab/cells": ^4.0.8
+    "@jupyterlab/codeeditor": ^4.0.8
+    "@jupyterlab/codemirror": ^4.0.8
+    "@jupyterlab/coreutils": ^6.0.8
+    "@jupyterlab/docregistry": ^4.0.8
+    "@jupyterlab/documentsearch": ^4.0.8
+    "@jupyterlab/lsp": ^4.0.8
+    "@jupyterlab/nbformat": ^4.0.8
+    "@jupyterlab/observables": ^5.0.8
+    "@jupyterlab/rendermime": ^4.0.8
+    "@jupyterlab/services": ^7.0.8
+    "@jupyterlab/settingregistry": ^4.0.8
+    "@jupyterlab/statusbar": ^4.0.8
+    "@jupyterlab/toc": ^6.0.8
+    "@jupyterlab/translation": ^4.0.8
+    "@jupyterlab/ui-components": ^4.0.8
+    "@lumino/algorithm": ^2.0.1
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/domutils": ^2.0.1
+    "@lumino/dragdrop": ^2.1.3
+    "@lumino/messaging": ^2.0.1
+    "@lumino/properties": ^2.0.1
+    "@lumino/signaling": ^2.1.2
+    "@lumino/virtualdom": ^2.0.1
+    "@lumino/widgets": ^2.3.0
+    react: ^18.2.0
+  checksum: 64ea11e1923fcae46d263c732cfa6a69a51099bdd637f40599da5359fb884600179a3c5b6f3c176c6ffa725f425b33f435be6391f8d087b443e5fc6d6d11ced2
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/observables@npm:^5.0.8":
+  version: 5.0.8
+  resolution: "@jupyterlab/observables@npm:5.0.8"
+  dependencies:
+    "@lumino/algorithm": ^2.0.1
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/disposable": ^2.1.2
+    "@lumino/messaging": ^2.0.1
+    "@lumino/signaling": ^2.1.2
+  checksum: 833c6af7f66a338d53e4ebfae2c10c57a55b8a1710730eed89e7a0103a4dd27b7b5634d0e7cf9c7db47d891fd4c8e72235de9816833482ef68356846200613be
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/outputarea@npm:^4.0.8":
+  version: 4.0.8
+  resolution: "@jupyterlab/outputarea@npm:4.0.8"
+  dependencies:
+    "@jupyterlab/apputils": ^4.1.8
+    "@jupyterlab/nbformat": ^4.0.8
+    "@jupyterlab/observables": ^5.0.8
+    "@jupyterlab/rendermime": ^4.0.8
+    "@jupyterlab/rendermime-interfaces": ^3.8.8
+    "@jupyterlab/services": ^7.0.8
+    "@jupyterlab/translation": ^4.0.8
+    "@lumino/algorithm": ^2.0.1
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/disposable": ^2.1.2
+    "@lumino/messaging": ^2.0.1
+    "@lumino/properties": ^2.0.1
+    "@lumino/signaling": ^2.1.2
+    "@lumino/widgets": ^2.3.0
+  checksum: 4e97a367d6d06b05838056ef6da48891484fe84e5c06a08f0928f7359fa8362f48903434d033e8ddabdc193ef4b61859855fecbebda3949703583275fd099339
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/rendermime-interfaces@npm:^3.8.8":
+  version: 3.8.8
+  resolution: "@jupyterlab/rendermime-interfaces@npm:3.8.8"
+  dependencies:
+    "@lumino/coreutils": ^1.11.0 || ^2.1.2
+    "@lumino/widgets": ^1.37.2 || ^2.3.0
+  checksum: b356cc18acedd7eebbf9e6f03329ad58f0aadb676ef7ef6b64dec610857a53593662df54752bb58780d34f39938ec35c6940918513e3a3cef7c5893bd0909684
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/rendermime@npm:^4.0.8":
+  version: 4.0.8
+  resolution: "@jupyterlab/rendermime@npm:4.0.8"
+  dependencies:
+    "@jupyterlab/apputils": ^4.1.8
+    "@jupyterlab/coreutils": ^6.0.8
+    "@jupyterlab/nbformat": ^4.0.8
+    "@jupyterlab/observables": ^5.0.8
+    "@jupyterlab/rendermime-interfaces": ^3.8.8
+    "@jupyterlab/services": ^7.0.8
+    "@jupyterlab/translation": ^4.0.8
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/messaging": ^2.0.1
+    "@lumino/signaling": ^2.1.2
+    "@lumino/widgets": ^2.3.0
+    lodash.escape: ^4.0.1
+  checksum: c1f9ebffc746fdc13c1b14a148fd2ae10132b5ca4e1eab27d18ac5bf3d3ae70cf2850b06f6c05a799f2c769792d81dab1447885d0cda7206c7cf63af10bbe4f2
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/services@npm:^7.0.8":
+  version: 7.0.8
+  resolution: "@jupyterlab/services@npm:7.0.8"
+  dependencies:
+    "@jupyter/ydoc": ^1.0.2
+    "@jupyterlab/coreutils": ^6.0.8
+    "@jupyterlab/nbformat": ^4.0.8
+    "@jupyterlab/settingregistry": ^4.0.8
+    "@jupyterlab/statedb": ^4.0.8
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/disposable": ^2.1.2
+    "@lumino/polling": ^2.1.2
+    "@lumino/properties": ^2.0.1
+    "@lumino/signaling": ^2.1.2
+    ws: ^8.11.0
+  checksum: b0112854d3014eff9d9855a6840d1efd0d866d4c011e7a9c4c1c5fba404dd13107b62de6ce845902d12cc6404aafdfee95127a2af43560ade53a00fc7b73378a
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/settingregistry@npm:^4.0.8":
+  version: 4.0.8
+  resolution: "@jupyterlab/settingregistry@npm:4.0.8"
+  dependencies:
+    "@jupyterlab/nbformat": ^4.0.8
+    "@jupyterlab/statedb": ^4.0.8
+    "@lumino/commands": ^2.1.3
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/disposable": ^2.1.2
+    "@lumino/signaling": ^2.1.2
+    "@rjsf/utils": ^5.1.0
+    ajv: ^8.12.0
+    json5: ^2.2.3
+  peerDependencies:
+    react: ">=16"
+  checksum: e9661539357edae60e4b300dff68b369e95e96acb343aeb25e23bdbcd6964c59dd40118ce3a856afaf969833958f3872c480e75cc488a5e882546cb88587c461
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/statedb@npm:^4.0.8":
+  version: 4.0.8
+  resolution: "@jupyterlab/statedb@npm:4.0.8"
+  dependencies:
+    "@lumino/commands": ^2.1.3
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/disposable": ^2.1.2
+    "@lumino/properties": ^2.0.1
+    "@lumino/signaling": ^2.1.2
+  checksum: bfd016e91158daf47e07e760126c0c2c3f6d01ecc8e9cad3e17241e5873decbc5fdfce82bf039fa83633b8760245af8003008f38272dafba56b73ac24768a99f
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/statusbar@npm:^4.0.8":
+  version: 4.0.8
+  resolution: "@jupyterlab/statusbar@npm:4.0.8"
+  dependencies:
+    "@jupyterlab/ui-components": ^4.0.8
+    "@lumino/algorithm": ^2.0.1
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/disposable": ^2.1.2
+    "@lumino/messaging": ^2.0.1
+    "@lumino/signaling": ^2.1.2
+    "@lumino/widgets": ^2.3.0
+    react: ^18.2.0
+  checksum: a07345a173e1c4500e5ce9aca6c8d619e5fecd928de0f6e88fd29241b39c09b85b26722279cc8119031d3015f2b32a0d3b9d85fd3cf9370c7605ebcd37d0d31a
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/toc@npm:^6.0.8":
+  version: 6.0.8
+  resolution: "@jupyterlab/toc@npm:6.0.8"
+  dependencies:
+    "@jupyterlab/apputils": ^4.1.8
+    "@jupyterlab/coreutils": ^6.0.8
+    "@jupyterlab/docregistry": ^4.0.8
+    "@jupyterlab/observables": ^5.0.8
+    "@jupyterlab/rendermime": ^4.0.8
+    "@jupyterlab/translation": ^4.0.8
+    "@jupyterlab/ui-components": ^4.0.8
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/disposable": ^2.1.2
+    "@lumino/messaging": ^2.0.1
+    "@lumino/signaling": ^2.1.2
+    "@lumino/widgets": ^2.3.0
+    react: ^18.2.0
+  checksum: 5d4373c5e0b3ea302275cdf117e17a201a6ab8337288cbdb7e6048b87de2ed8e293e3dd203fb23f7d25db080e06e8271559b1d5aa5e33202130cc95d0972b95f
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/translation@npm:^4.0.8":
+  version: 4.0.8
+  resolution: "@jupyterlab/translation@npm:4.0.8"
+  dependencies:
+    "@jupyterlab/coreutils": ^6.0.8
+    "@jupyterlab/rendermime-interfaces": ^3.8.8
+    "@jupyterlab/services": ^7.0.8
+    "@jupyterlab/statedb": ^4.0.8
+    "@lumino/coreutils": ^2.1.2
+  checksum: 998d42d85ccd779237ac69abfaf2e341d865374ed5a1a4d234470337f498636511eec0562c741ad44a6a75fae930a510a0a76e176f72665499be2b7edb0dc5f8
+  languageName: node
+  linkType: hard
+
+"@jupyterlab/ui-components@npm:^4.0.8":
+  version: 4.0.8
+  resolution: "@jupyterlab/ui-components@npm:4.0.8"
+  dependencies:
+    "@jupyterlab/coreutils": ^6.0.8
+    "@jupyterlab/observables": ^5.0.8
+    "@jupyterlab/rendermime-interfaces": ^3.8.8
+    "@jupyterlab/translation": ^4.0.8
+    "@lumino/algorithm": ^2.0.1
+    "@lumino/commands": ^2.1.3
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/disposable": ^2.1.2
+    "@lumino/messaging": ^2.0.1
+    "@lumino/polling": ^2.1.2
+    "@lumino/properties": ^2.0.1
+    "@lumino/signaling": ^2.1.2
+    "@lumino/virtualdom": ^2.0.1
+    "@lumino/widgets": ^2.3.0
+    "@rjsf/core": ^5.1.0
+    "@rjsf/utils": ^5.1.0
+    react: ^18.2.0
+    react-dom: ^18.2.0
+    typestyle: ^2.0.4
+  peerDependencies:
+    react: ^18.2.0
+  checksum: 7bf11f5ee3c1f88656175c0d3b290be0670d7787076a1eba944875e4780bc2b34c0b9a3af038806ff925620b3056cee36daff08f3ff91acc6c46fd1438bf004d
+  languageName: node
+  linkType: hard
+
+"@lezer/common@npm:^1.0.0, @lezer/common@npm:^1.0.2, @lezer/common@npm:^1.1.0":
+  version: 1.1.0
+  resolution: "@lezer/common@npm:1.1.0"
+  checksum: 93c208a44d1c0bdf7407853ba7c4ddcedf1c52d1b82170813d83b9bd6301aa23587405ac54332fe39ce8bc37f706936ab237ceb4d3d535d1dead650153b6474c
+  languageName: node
+  linkType: hard
+
+"@lezer/cpp@npm:^1.0.0":
+  version: 1.1.1
+  resolution: "@lezer/cpp@npm:1.1.1"
+  dependencies:
+    "@lezer/highlight": ^1.0.0
+    "@lezer/lr": ^1.0.0
+  checksum: c9e1db19776eafbfe0c3b8448d46c94d9a1d30f7fef630292e63bab82e6d5d6903a043ee8cf341bcbf84c00ee0d79b8c255bab8fd8e0a91355ae912b53c78935
+  languageName: node
+  linkType: hard
+
+"@lezer/css@npm:^1.0.0, @lezer/css@npm:^1.1.0":
+  version: 1.1.3
+  resolution: "@lezer/css@npm:1.1.3"
+  dependencies:
+    "@lezer/highlight": ^1.0.0
+    "@lezer/lr": ^1.0.0
+  checksum: c8069ef0a6751441d2dc9180f7ebfd7aeb35df0ca2f1a748a2f26203a9ef6cc30f17f3074e2b49520453eb39329dadfdbbb901c6d9d067dc955ceb58c1f8cc6a
+  languageName: node
+  linkType: hard
+
+"@lezer/generator@npm:^1.2.2":
+  version: 1.5.1
+  resolution: "@lezer/generator@npm:1.5.1"
+  dependencies:
+    "@lezer/common": ^1.0.2
+    "@lezer/lr": ^1.3.0
+  bin:
+    lezer-generator: src/lezer-generator.cjs
+  checksum: 4d8267e6d356e48ca5214a234679b2b3b1d3706cb9dffecee4495b7a16c8a02502d6a078f8afdf5d8c79f94af34f2c1b5c08556aead8376d7b23795612b651d0
+  languageName: node
+  linkType: hard
+
+"@lezer/highlight@npm:^1.0.0, @lezer/highlight@npm:^1.1.3, @lezer/highlight@npm:^1.1.4":
+  version: 1.1.6
+  resolution: "@lezer/highlight@npm:1.1.6"
+  dependencies:
+    "@lezer/common": ^1.0.0
+  checksum: 411a702394c4c996b7d7f145a38f3a85a8cc698b3918acc7121c629255bb76d4ab383753f69009e011dc415210c6acbbb5b27bde613259ab67e600b29397b03b
+  languageName: node
+  linkType: hard
+
+"@lezer/html@npm:^1.3.0":
+  version: 1.3.6
+  resolution: "@lezer/html@npm:1.3.6"
+  dependencies:
+    "@lezer/common": ^1.0.0
+    "@lezer/highlight": ^1.0.0
+    "@lezer/lr": ^1.0.0
+  checksum: 1d3af781660968505e5083a34f31ea3549fd5f3949227fa93cc318bca61bce76ffe977bd875624ba938a2039834ec1a33df5d365e94c48131c85dd26f980d92c
+  languageName: node
+  linkType: hard
+
+"@lezer/java@npm:^1.0.0":
+  version: 1.0.4
+  resolution: "@lezer/java@npm:1.0.4"
+  dependencies:
+    "@lezer/highlight": ^1.0.0
+    "@lezer/lr": ^1.0.0
+  checksum: 97f5a2c2d733afba5dc57a0da9a97515b19b5e63bb5937717dac4e8c9baed74d15c0cb5c1580858b678931f11d517c56d89f903968fa48931f9c62e2ea67a107
+  languageName: node
+  linkType: hard
+
+"@lezer/javascript@npm:^1.0.0":
+  version: 1.4.9
+  resolution: "@lezer/javascript@npm:1.4.9"
+  dependencies:
+    "@lezer/highlight": ^1.1.3
+    "@lezer/lr": ^1.3.0
+  checksum: adac0048e4ab33dc48db42014f02d53a2eab81d12c990b23f237a3e83b125bda271607442aaa50dc0ac870a803e678135111366235f7c29a5052a288c1003960
+  languageName: node
+  linkType: hard
+
+"@lezer/json@npm:^1.0.0":
+  version: 1.0.1
+  resolution: "@lezer/json@npm:1.0.1"
+  dependencies:
+    "@lezer/highlight": ^1.0.0
+    "@lezer/lr": ^1.0.0
+  checksum: fcd17178f6a58e71c83e08fdc047e3708528b28591ba8f08ed35268f370d1ec9b63af0afa9d82a77fec26e9eb477ab3cfdc31c951e080d118ef607f9f9bb52e3
+  languageName: node
+  linkType: hard
+
+"@lezer/lr@npm:^1.0.0, @lezer/lr@npm:^1.1.0, @lezer/lr@npm:^1.3.0":
+  version: 1.3.14
+  resolution: "@lezer/lr@npm:1.3.14"
+  dependencies:
+    "@lezer/common": ^1.0.0
+  checksum: 07be41edcb6c332a3567436d2c626131544181c4d680811baf23f6157db3dce4ebfef325cbd0b88dc8b128b83fbe6363c5dcf3e0a4ff369ddfae05d9f207daee
+  languageName: node
+  linkType: hard
+
+"@lezer/markdown@npm:^1.0.0, @lezer/markdown@npm:^1.0.2":
+  version: 1.1.0
+  resolution: "@lezer/markdown@npm:1.1.0"
+  dependencies:
+    "@lezer/common": ^1.0.0
+    "@lezer/highlight": ^1.0.0
+  checksum: b3699c0724dd41e3e6e3078a0e1bcd272ccaebf17b20e5160de3ecf26200cdaa59aa19c9542aac5ab8c7e3aecce1003544b016bb5c32e458bbd5982add8ca0bf
+  languageName: node
+  linkType: hard
+
+"@lezer/php@npm:^1.0.0":
+  version: 1.0.1
+  resolution: "@lezer/php@npm:1.0.1"
+  dependencies:
+    "@lezer/highlight": ^1.0.0
+    "@lezer/lr": ^1.1.0
+  checksum: a847c255c030b4d38913ddf1d5bd7324d83be7ef8d1d244542870be03b9bf7dc71283afeb2415c40dfd188cb99f0cc44bad760b5f3b7c35c3b8e5e00253848fc
+  languageName: node
+  linkType: hard
+
+"@lezer/python@npm:^1.1.4":
+  version: 1.1.9
+  resolution: "@lezer/python@npm:1.1.9"
+  dependencies:
+    "@lezer/highlight": ^1.0.0
+    "@lezer/lr": ^1.0.0
+  checksum: cc7e712665f0b7990fd00ba798c2e377f8393d0034a85da33b370e256322d92f668f51b70aa91585ed165718bad60fba6e86203f877d537819874be2549ec31f
+  languageName: node
+  linkType: hard
+
+"@lezer/rust@npm:^1.0.0":
+  version: 1.0.1
+  resolution: "@lezer/rust@npm:1.0.1"
+  dependencies:
+    "@lezer/highlight": ^1.0.0
+    "@lezer/lr": ^1.0.0
+  checksum: 1e02fdf09206979e7d4f87b020589f410c4c5e452a7b7b0296f6772ce3571c1bd7ed37495fbeeecf3d4423000f2efdabd462ba8a949c2b351fd35550327a7613
+  languageName: node
+  linkType: hard
+
+"@lezer/xml@npm:^1.0.0":
+  version: 1.0.3
+  resolution: "@lezer/xml@npm:1.0.3"
+  dependencies:
+    "@lezer/highlight": ^1.0.0
+    "@lezer/lr": ^1.0.0
+  checksum: a4758859abcab3bc3f8680f79f7fb7dbbb6842c7d552888f95cc85a845450342a18731fbf49cbaec5f39970b9e5b96a66c8381eda036d3ebf7c952da5ddd7666
+  languageName: node
+  linkType: hard
+
+"@lumino/algorithm@npm:^2.0.1":
+  version: 2.0.1
+  resolution: "@lumino/algorithm@npm:2.0.1"
+  checksum: cbf7fcf6ee6b785ea502cdfddc53d61f9d353dcb9659343511d5cd4b4030be2ff2ca4c08daec42f84417ab0318a3d9972a17319fa5231693e109ab112dcf8000
+  languageName: node
+  linkType: hard
+
+"@lumino/application@npm:^2.2.1":
+  version: 2.2.1
+  resolution: "@lumino/application@npm:2.2.1"
+  dependencies:
+    "@lumino/commands": ^2.1.3
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/widgets": ^2.3.0
+  checksum: a33e661703728440bc7d2ddb4674261f4de0d20eb8c9846646cbd6debac03b5c65e78d739a500903550fd83b8f47b47fa82ec178c97bc9967ca3ac4014075cde
+  languageName: node
+  linkType: hard
+
+"@lumino/collections@npm:^2.0.1":
+  version: 2.0.1
+  resolution: "@lumino/collections@npm:2.0.1"
+  dependencies:
+    "@lumino/algorithm": ^2.0.1
+  checksum: 8a29b7973a388a33c5beda0819dcd2dc2aad51a8406dcfd4581b055a9f77a39dc5800f7a8b4ae3c0bb97ae7b56a7a869e2560ffb7a920a28e93b477ba05907d6
+  languageName: node
+  linkType: hard
+
+"@lumino/commands@npm:^2.1.3":
+  version: 2.1.3
+  resolution: "@lumino/commands@npm:2.1.3"
+  dependencies:
+    "@lumino/algorithm": ^2.0.1
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/disposable": ^2.1.2
+    "@lumino/domutils": ^2.0.1
+    "@lumino/keyboard": ^2.0.1
+    "@lumino/signaling": ^2.1.2
+    "@lumino/virtualdom": ^2.0.1
+  checksum: e4e3ee279f2a5e8d68e4ce142c880333f5542f90c684972402356936ecb5cf5e07163800b59e7cb8c911cbdb4e5089edcc5dd2990bc8db10c87517268de1fc5d
+  languageName: node
+  linkType: hard
+
+"@lumino/coreutils@npm:^1.11.0 || ^2.0.0, @lumino/coreutils@npm:^1.11.0 || ^2.1.2, @lumino/coreutils@npm:^2.1.2":
+  version: 2.1.2
+  resolution: "@lumino/coreutils@npm:2.1.2"
+  checksum: 7865317ac0676b448d108eb57ab5d8b2a17c101995c0f7a7106662d9fe6c859570104525f83ee3cda12ae2e326803372206d6f4c1f415a5b59e4158a7b81066f
+  languageName: node
+  linkType: hard
+
+"@lumino/datagrid@npm:^2.2.0":
+  version: 2.2.0
+  resolution: "@lumino/datagrid@npm:2.2.0"
+  dependencies:
+    "@lumino/algorithm": ^2.0.1
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/disposable": ^2.1.2
+    "@lumino/domutils": ^2.0.1
+    "@lumino/dragdrop": ^2.1.3
+    "@lumino/keyboard": ^2.0.1
+    "@lumino/messaging": ^2.0.1
+    "@lumino/signaling": ^2.1.2
+    "@lumino/widgets": ^2.3.0
+  checksum: dcd6e06500c05b0f30b9924a25a2cc4c1cb98b8432f488148e74e98a7fe092a1f19cadbdc9edfbede9e2030d30b84e5633e40753fbe8d6bbb120d3336d3675ff
+  languageName: node
+  linkType: hard
+
+"@lumino/disposable@npm:^1.10.0 || ^2.0.0, @lumino/disposable@npm:^2.1.2":
+  version: 2.1.2
+  resolution: "@lumino/disposable@npm:2.1.2"
+  dependencies:
+    "@lumino/signaling": ^2.1.2
+  checksum: ac2fb2bf18d0b2939fda454f3db248a0ff6e8a77b401e586d1caa9293b3318f808b93a117c9c3ac27cd17aab545aea83b49108d099b9b2f5503ae2a012fbc6e2
+  languageName: node
+  linkType: hard
+
+"@lumino/domutils@npm:^2.0.1":
+  version: 2.0.1
+  resolution: "@lumino/domutils@npm:2.0.1"
+  checksum: 61fa0ab226869dfbb763fc426790cf5a43b7d6f4cea1364c6dd56d61c44bff05eea188d33ff847449608ef58ed343161bee15c19b96f35410e4ee35815dc611a
+  languageName: node
+  linkType: hard
+
+"@lumino/dragdrop@npm:^2.1.3":
+  version: 2.1.3
+  resolution: "@lumino/dragdrop@npm:2.1.3"
+  dependencies:
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/disposable": ^2.1.2
+  checksum: d5f7eb4cc9f9a084cb9af10f02d6741b25d683350878ecbc324e24ba9d4b5246451a410e2ca5fff227aab1c191d1e73a2faf431f93e13111d67a4e426e126258
+  languageName: node
+  linkType: hard
+
+"@lumino/keyboard@npm:^2.0.1":
+  version: 2.0.1
+  resolution: "@lumino/keyboard@npm:2.0.1"
+  checksum: cf33f13427a418efd7cc91061233321e860d5404f3d86397781028309bef86c8ad2d88276ffe335c1db0fe619bd9d1e60641c81f881696957a58703ee4652c3e
+  languageName: node
+  linkType: hard
+
+"@lumino/messaging@npm:^2.0.1":
+  version: 2.0.1
+  resolution: "@lumino/messaging@npm:2.0.1"
+  dependencies:
+    "@lumino/algorithm": ^2.0.1
+    "@lumino/collections": ^2.0.1
+  checksum: 964c4651c374b17452b4252b7d71500b32d2ecd87c192fc5bcf5d3bd1070661d78d07edcac8eca7d1d6fd50aa25992505485e1296d6dd995691b8e349b652045
+  languageName: node
+  linkType: hard
+
+"@lumino/polling@npm:^2.1.2":
+  version: 2.1.2
+  resolution: "@lumino/polling@npm:2.1.2"
+  dependencies:
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/disposable": ^2.1.2
+    "@lumino/signaling": ^2.1.2
+  checksum: fa9b401e6dbeb8f31d7e3ba485e8ef1e0c92b3f2da086239c0ed49931026f5d3528709193c93e031e35ac624fb4bbbfcdcbaa0e25eb797f36e2952e5cd91e9e3
+  languageName: node
+  linkType: hard
+
+"@lumino/properties@npm:^2.0.1":
+  version: 2.0.1
+  resolution: "@lumino/properties@npm:2.0.1"
+  checksum: c50173a935148cc4148fdaea119df1d323ee004ae16ab666800388d27e9730345629662d85f25591683329b39f0cdae60ee8c94e8943b4d0ef7d7370a38128d6
+  languageName: node
+  linkType: hard
+
+"@lumino/signaling@npm:^1.10.0 || ^2.0.0, @lumino/signaling@npm:^2.1.2":
+  version: 2.1.2
+  resolution: "@lumino/signaling@npm:2.1.2"
+  dependencies:
+    "@lumino/algorithm": ^2.0.1
+    "@lumino/coreutils": ^2.1.2
+  checksum: ad7d7153db57980da899c43e412e6130316ef30b231a70250e7af49058db16cadb018c1417a2ea8083d83c48623cfe6b705fa82bf10216b1a8949aed9f4aca4e
+  languageName: node
+  linkType: hard
+
+"@lumino/virtualdom@npm:^2.0.1":
+  version: 2.0.1
+  resolution: "@lumino/virtualdom@npm:2.0.1"
+  dependencies:
+    "@lumino/algorithm": ^2.0.1
+  checksum: cf59b6f15b430e13e9e657b7a0619b9056cd9ea7b2a87f407391d071c501b77403c302b6a66dca510382045e75b2e3fe551630bb391f1c6b33678057d4bec164
+  languageName: node
+  linkType: hard
+
+"@lumino/widgets@npm:^1.37.2 || ^2.3.0, @lumino/widgets@npm:^2.3.0":
+  version: 2.3.0
+  resolution: "@lumino/widgets@npm:2.3.0"
+  dependencies:
+    "@lumino/algorithm": ^2.0.1
+    "@lumino/commands": ^2.1.3
+    "@lumino/coreutils": ^2.1.2
+    "@lumino/disposable": ^2.1.2
+    "@lumino/domutils": ^2.0.1
+    "@lumino/dragdrop": ^2.1.3
+    "@lumino/keyboard": ^2.0.1
+    "@lumino/messaging": ^2.0.1
+    "@lumino/properties": ^2.0.1
+    "@lumino/signaling": ^2.1.2
+    "@lumino/virtualdom": ^2.0.1
+  checksum: a8559bd3574b7fc16e7679e05994c515b0d3e78dada35786d161f67c639941d134e92ce31d95c2e4ac06709cdf83b0e7fb4b6414a3f7779579222a2fb525d025
+  languageName: node
+  linkType: hard
+
+"@npmcli/agent@npm:^2.0.0":
+  version: 2.2.0
+  resolution: "@npmcli/agent@npm:2.2.0"
+  dependencies:
+    agent-base: ^7.1.0
+    http-proxy-agent: ^7.0.0
+    https-proxy-agent: ^7.0.1
+    lru-cache: ^10.0.1
+    socks-proxy-agent: ^8.0.1
+  checksum: 3b25312edbdfaa4089af28e2d423b6f19838b945e47765b0c8174c1395c79d43c3ad6d23cb364b43f59fd3acb02c93e3b493f72ddbe3dfea04c86843a7311fc4
+  languageName: node
+  linkType: hard
+
+"@npmcli/fs@npm:^3.1.0":
+  version: 3.1.0
+  resolution: "@npmcli/fs@npm:3.1.0"
+  dependencies:
+    semver: ^7.3.5
+  checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e
+  languageName: node
+  linkType: hard
+
+"@pkgjs/parseargs@npm:^0.11.0":
+  version: 0.11.0
+  resolution: "@pkgjs/parseargs@npm:0.11.0"
+  checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f
+  languageName: node
+  linkType: hard
+
+"@playwright/test@npm:^1.32.2, @playwright/test@npm:^1.37.0":
+  version: 1.39.0
+  resolution: "@playwright/test@npm:1.39.0"
+  dependencies:
+    playwright: 1.39.0
+  bin:
+    playwright: cli.js
+  checksum: e93e58fc1af4239f239b890374f066c9a758e2492d25e2c1a532f3f00782ab8e7706956a07540fd14882c74e75f5de36273621adce9b79afb8e36e6c15f1d539
+  languageName: node
+  linkType: hard
+
+"@rjsf/core@npm:^5.1.0":
+  version: 5.13.3
+  resolution: "@rjsf/core@npm:5.13.3"
+  dependencies:
+    lodash: ^4.17.21
+    lodash-es: ^4.17.21
+    markdown-to-jsx: ^7.3.2
+    nanoid: ^3.3.6
+    prop-types: ^15.8.1
+  peerDependencies:
+    "@rjsf/utils": ^5.12.x
+    react: ^16.14.0 || >=17
+  checksum: ba7c855d2985bad845e75aadd1d5f227dde8715f14f9d1f2111cc502717eead93bc3430662fd9b04489a130e4100dc43eeb73a9c7d1c028655436dd7ca67eb4f
+  languageName: node
+  linkType: hard
+
+"@rjsf/utils@npm:^5.1.0":
+  version: 5.13.3
+  resolution: "@rjsf/utils@npm:5.13.3"
+  dependencies:
+    json-schema-merge-allof: ^0.8.1
+    jsonpointer: ^5.0.1
+    lodash: ^4.17.21
+    lodash-es: ^4.17.21
+    react-is: ^18.2.0
+  peerDependencies:
+    react: ^16.14.0 || >=17
+  checksum: 7b2d3c7791a6f10b620f5cec9820994f6a2a728604848423c8d7534d762ff4f6ae64132077a7c9c99c7ec3c8166667fa911d3012c4971eea8387758233070ab1
+  languageName: node
+  linkType: hard
+
+"@stdlib/array@npm:^0.0.x":
+  version: 0.0.12
+  resolution: "@stdlib/array@npm:0.0.12"
+  dependencies:
+    "@stdlib/assert": ^0.0.x
+    "@stdlib/blas": ^0.0.x
+    "@stdlib/complex": ^0.0.x
+    "@stdlib/constants": ^0.0.x
+    "@stdlib/math": ^0.0.x
+    "@stdlib/symbol": ^0.0.x
+    "@stdlib/types": ^0.0.x
+    "@stdlib/utils": ^0.0.x
+  checksum: 0d95690461f0c4560eabef0796d1170274415cd03de80333c6d39814d0484a6873ef4be04a64941ebf3a600747e84c3a4f23b21c7020e53842c07985331b39f1
+  conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows)
+  languageName: node
+  linkType: hard
+
+"@stdlib/assert@npm:^0.0.x":
+  version: 0.0.12
+  resolution: "@stdlib/assert@npm:0.0.12"
+  dependencies:
+    "@stdlib/array": ^0.0.x
+    "@stdlib/cli": ^0.0.x
+    "@stdlib/complex": ^0.0.x
+    "@stdlib/constants": ^0.0.x
+    "@stdlib/fs": ^0.0.x
+    "@stdlib/math": ^0.0.x
+    "@stdlib/ndarray": ^0.0.x
+    "@stdlib/number": ^0.0.x
+    "@stdlib/os": ^0.0.x
+    "@stdlib/process": ^0.0.x
+    "@stdlib/regexp": ^0.0.x
+    "@stdlib/streams": ^0.0.x
+    "@stdlib/string": ^0.0.x
+    "@stdlib/symbol": ^0.0.x
+    "@stdlib/types": ^0.0.x
+    "@stdlib/utils": ^0.0.x
+  checksum: d4dcbeabbfb86ba56cdd972ff785f43e7d25018b2b1800cab8b0deb9e5c54c795d6ead3d142f4dd13c351f636deba4dc1857c85147d6b059fdc78eb2c9510b99
+  conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows)
+  languageName: node
+  linkType: hard
+
+"@stdlib/bigint@npm:^0.0.x":
+  version: 0.0.11
+  resolution: "@stdlib/bigint@npm:0.0.11"
+  dependencies:
+    "@stdlib/utils": ^0.0.x
+  checksum: 7bf825d116e4b010e214209af239706ac1ef923eecb5c8b0af9229c9975450081355e441ecc7b4765d81a9e653141868e0492b8061d1e65724fa42fb8283aabd
+  conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows)
+  languageName: node
+  linkType: hard
+
+"@stdlib/blas@npm:^0.0.x":
+  version: 0.0.12
+  resolution: "@stdlib/blas@npm:0.0.12"
+  dependencies:
+    "@stdlib/array": ^0.0.x
+    "@stdlib/assert": ^0.0.x
+    "@stdlib/math": ^0.0.x
+    "@stdlib/number": ^0.0.x
+    "@stdlib/types": ^0.0.x
+    "@stdlib/utils": ^0.0.x
+  checksum: 67ea00a968f7a9c710b37f718b7f756e2830e479a1a1ee44cbf6ec3cc27dd8863078928867707d9d1624007e81de89d040f2326d10f435e2cce913cab121975e
+  conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows)
+  languageName: node
+  linkType: hard
+
+"@stdlib/buffer@npm:^0.0.x":
+  version: 0.0.11
+  resolution: "@stdlib/buffer@npm:0.0.11"
+  dependencies:
+    "@stdlib/array": ^0.0.x
+    "@stdlib/assert": ^0.0.x
+    "@stdlib/process": ^0.0.x
+    "@stdlib/types": ^0.0.x
+    "@stdlib/utils": ^0.0.x
+  checksum: 93df02e3bf548e940ff9cef65121566e7bf93b554f0614d62336c9dbccfc07c9f1b1c4e9a7aebbe4819ef16a6d2a33a7010c2fdf908fface8298a3109c3c4ef0
+  conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows)
+  languageName: node
+  linkType: hard
+
+"@stdlib/cli@npm:^0.0.x":
+  version: 0.0.10
+  resolution: "@stdlib/cli@npm:0.0.10"
+  dependencies:
+    "@stdlib/utils": ^0.0.x
+    minimist: ^1.2.0
+  checksum: bbece8d3dbff2835518582a7726c6c4c22743dc408d2303d9e35a3b72151d5d0a8e78d61bc896663d4c3fb702e966abea7a1bd621ed943723a359f57053f121f
+  conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows)
+  languageName: node
+  linkType: hard
+
+"@stdlib/complex@npm:^0.0.x":
+  version: 0.0.12
+  resolution: "@stdlib/complex@npm:0.0.12"
+  dependencies:
+    "@stdlib/array": ^0.0.x
+    "@stdlib/assert": ^0.0.x
+    "@stdlib/types": ^0.0.x
+    "@stdlib/utils": ^0.0.x
+  checksum: 8eda35027495417f1b0dd9bbbc2d4983f50ad3cf9e2276ffe0945ccdbe78f0fc66b9fc36ab71926d2a125c8fb7467c8970a222b230b42ff4bb8042c53314ca09
+  conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows)
+  languageName: node
+  linkType: hard
+
+"@stdlib/constants@npm:^0.0.x":
+  version: 0.0.11
+  resolution: "@stdlib/constants@npm:0.0.11"
+  dependencies:
+    "@stdlib/array": ^0.0.x
+    "@stdlib/assert": ^0.0.x
+    "@stdlib/number": ^0.0.x
+    "@stdlib/utils": ^0.0.x
+  checksum: fc19d055a4e71ae84b6c92e4a3a88371d50693da8f0a813df4063dc549374d19b9cf23f4fdae2fb7b2013e13929f713c3e1b9e4054767e741b75561ed43d15c3
+  conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows)
+  languageName: node
+  linkType: hard
+
+"@stdlib/fs@npm:^0.0.x":
+  version: 0.0.12
+  resolution: "@stdlib/fs@npm:0.0.12"
+  dependencies:
+    "@stdlib/array": ^0.0.x
+    "@stdlib/assert": ^0.0.x
+    "@stdlib/cli": ^0.0.x
+    "@stdlib/math": ^0.0.x
+    "@stdlib/process": ^0.0.x
+    "@stdlib/string": ^0.0.x
+    "@stdlib/utils": ^0.0.x
+    debug: ^2.6.9
+  checksum: 33ac5ee4844d4599fe3a8a8402f1a3e2cafee31a5c9cf5b85df530a61a2b54ef17dc30a67be98dacdc2958219413edd0e4cdc3c28266f4bc30277ee024f6a49e
+  conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows)
+  languageName: node
+  linkType: hard
+
+"@stdlib/math@npm:^0.0.x":
+  version: 0.0.11
+  resolution: "@stdlib/math@npm:0.0.11"
+  dependencies:
+    "@stdlib/assert": ^0.0.x
+    "@stdlib/constants": ^0.0.x
+    "@stdlib/ndarray": ^0.0.x
+    "@stdlib/number": ^0.0.x
+    "@stdlib/strided": ^0.0.x
+    "@stdlib/symbol": ^0.0.x
+    "@stdlib/types": ^0.0.x
+    "@stdlib/utils": ^0.0.x
+    debug: ^2.6.9
+  checksum: 6c4c9dda36fbce50553e1437354c5286aa782c42399534dbed8e696ddeb1b91ef6cff5fe5962f1c9e1eb2ef63c63d9bd58f7ca4b87d59018aaac20099c3fb79a
+  conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows)
+  languageName: node
+  linkType: hard
+
+"@stdlib/ndarray@npm:^0.0.x":
+  version: 0.0.13
+  resolution: "@stdlib/ndarray@npm:0.0.13"
+  dependencies:
+    "@stdlib/array": ^0.0.x
+    "@stdlib/assert": ^0.0.x
+    "@stdlib/bigint": ^0.0.x
+    "@stdlib/buffer": ^0.0.x
+    "@stdlib/complex": ^0.0.x
+    "@stdlib/constants": ^0.0.x
+    "@stdlib/math": ^0.0.x
+    "@stdlib/number": ^0.0.x
+    "@stdlib/string": ^0.0.x
+    "@stdlib/types": ^0.0.x
+    "@stdlib/utils": ^0.0.x
+  checksum: 842a94afce5fc74bf8a964b75a302ddb8713eadbc79616e6799f1310c8bce860ed9e9877adc4a39338d9136b8798947ee21cf03368d46408308a313c8075d49a
+  conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows)
+  languageName: node
+  linkType: hard
+
+"@stdlib/nlp@npm:^0.0.x":
+  version: 0.0.11
+  resolution: "@stdlib/nlp@npm:0.0.11"
+  dependencies:
+    "@stdlib/array": ^0.0.x
+    "@stdlib/assert": ^0.0.x
+    "@stdlib/math": ^0.0.x
+    "@stdlib/random": ^0.0.x
+    "@stdlib/string": ^0.0.x
+    "@stdlib/utils": ^0.0.x
+  checksum: 398fe2853fb95404bb6598e3e199ca3e0435b94447d50e14e2e30582cadfb91f43464f23d80a0e1da4d64567a4a108a7299d7440509f1ab26b02aea7bb16e9a8
+  conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows)
+  languageName: node
+  linkType: hard
+
+"@stdlib/number@npm:^0.0.x":
+  version: 0.0.10
+  resolution: "@stdlib/number@npm:0.0.10"
+  dependencies:
+    "@stdlib/array": ^0.0.x
+    "@stdlib/assert": ^0.0.x
+    "@stdlib/constants": ^0.0.x
+    "@stdlib/math": ^0.0.x
+    "@stdlib/os": ^0.0.x
+    "@stdlib/string": ^0.0.x
+    "@stdlib/types": ^0.0.x
+    "@stdlib/utils": ^0.0.x
+  checksum: 326190956c787cbf9321c332beedab5ba4b3fa97d52a82aa708a0349b4678c0df7a351424f00a606f4eaca4fb4ba4cc191580c99d7c64ee0f08d37baa3de14f2
+  conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows)
+  languageName: node
+  linkType: hard
+
+"@stdlib/os@npm:^0.0.x":
+  version: 0.0.12
+  resolution: "@stdlib/os@npm:0.0.12"
+  dependencies:
+    "@stdlib/assert": ^0.0.x
+    "@stdlib/cli": ^0.0.x
+    "@stdlib/fs": ^0.0.x
+    "@stdlib/process": ^0.0.x
+    "@stdlib/utils": ^0.0.x
+  checksum: 37156b0c723da70d7740d92d08fc592eae803461c1d546cff6ac044765d6e40722fdad342219277e747c39344b513096ac1d0aa1e733cf3079bd8a9a8578612a
+  conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows)
+  languageName: node
+  linkType: hard
+
+"@stdlib/process@npm:^0.0.x":
+  version: 0.0.12
+  resolution: "@stdlib/process@npm:0.0.12"
+  dependencies:
+    "@stdlib/assert": ^0.0.x
+    "@stdlib/buffer": ^0.0.x
+    "@stdlib/cli": ^0.0.x
+    "@stdlib/fs": ^0.0.x
+    "@stdlib/streams": ^0.0.x
+    "@stdlib/string": ^0.0.x
+    "@stdlib/utils": ^0.0.x
+  checksum: 6d5c3d943f9914d1ae39bd36ad7436f783cf64baa2bff67a808035c99258676ae3f704c328a78d62754951cf85fe99d8e9af5f4fa7d5f8cba347bca72767e357
+  conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows)
+  languageName: node
+  linkType: hard
+
+"@stdlib/random@npm:^0.0.x":
+  version: 0.0.12
+  resolution: "@stdlib/random@npm:0.0.12"
+  dependencies:
+    "@stdlib/array": ^0.0.x
+    "@stdlib/assert": ^0.0.x
+    "@stdlib/blas": ^0.0.x
+    "@stdlib/buffer": ^0.0.x
+    "@stdlib/cli": ^0.0.x
+    "@stdlib/constants": ^0.0.x
+    "@stdlib/fs": ^0.0.x
+    "@stdlib/math": ^0.0.x
+    "@stdlib/process": ^0.0.x
+    "@stdlib/stats": ^0.0.x
+    "@stdlib/streams": ^0.0.x
+    "@stdlib/symbol": ^0.0.x
+    "@stdlib/types": ^0.0.x
+    "@stdlib/utils": ^0.0.x
+    debug: ^2.6.9
+    readable-stream: ^2.1.4
+  checksum: 67fcb5553274f8596ceae91153e96ae297bacfd55279821cb09f19f2844845aaf892802e4a5962965323dbfded0c7df8a89a6ce77d60d5c8a5899d483055a964
+  conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows)
+  languageName: node
+  linkType: hard
+
+"@stdlib/regexp@npm:^0.0.x":
+  version: 0.0.13
+  resolution: "@stdlib/regexp@npm:0.0.13"
+  dependencies:
+    "@stdlib/assert": ^0.0.x
+    "@stdlib/utils": ^0.0.x
+  checksum: dd52adb096ff9a02d1c4818be2889ae01bc04a0cdbc0d52473685e0a7a4eaa13e1be603b964f140f7488d11450b644dc5f8c97029d77db1ed4a563554245ff1c
+  conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows)
+  languageName: node
+  linkType: hard
+
+"@stdlib/stats@npm:^0.0.x, @stdlib/stats@npm:~0.0.13":
+  version: 0.0.13
+  resolution: "@stdlib/stats@npm:0.0.13"
+  dependencies:
+    "@stdlib/array": ^0.0.x
+    "@stdlib/assert": ^0.0.x
+    "@stdlib/blas": ^0.0.x
+    "@stdlib/constants": ^0.0.x
+    "@stdlib/math": ^0.0.x
+    "@stdlib/ndarray": ^0.0.x
+    "@stdlib/random": ^0.0.x
+    "@stdlib/string": ^0.0.x
+    "@stdlib/symbol": ^0.0.x
+    "@stdlib/types": ^0.0.x
+    "@stdlib/utils": ^0.0.x
+  checksum: 5ca12b2e123543f56a59aca828e14afaf525ad4aa40467bee7037a9178e21e55d4ce8ba3de9387cc9a0efe3e0d035d6c58705b12f634f77a2b3f87d334dfb076
+  conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows)
+  languageName: node
+  linkType: hard
+
+"@stdlib/streams@npm:^0.0.x":
+  version: 0.0.12
+  resolution: "@stdlib/streams@npm:0.0.12"
+  dependencies:
+    "@stdlib/assert": ^0.0.x
+    "@stdlib/buffer": ^0.0.x
+    "@stdlib/cli": ^0.0.x
+    "@stdlib/fs": ^0.0.x
+    "@stdlib/types": ^0.0.x
+    "@stdlib/utils": ^0.0.x
+    debug: ^2.6.9
+    readable-stream: ^2.1.4
+  checksum: 231b4607d082ea81d9dadbeab08002ec398a29c7eb5d611d8a4183f9db6964428e2f8a9e0f8edd085ca12b5d58258576987a575e9d8f6fcabcb5a62c6b8efe88
+  conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows)
+  languageName: node
+  linkType: hard
+
+"@stdlib/strided@npm:^0.0.x":
+  version: 0.0.12
+  resolution: "@stdlib/strided@npm:0.0.12"
+  dependencies:
+    "@stdlib/assert": ^0.0.x
+    "@stdlib/math": ^0.0.x
+    "@stdlib/ndarray": ^0.0.x
+    "@stdlib/types": ^0.0.x
+    "@stdlib/utils": ^0.0.x
+  checksum: 55ccc8543596894a2e3ad734b394700c69697b499a54b3bfbcf80cddd8d91509792c23931f5cebf7c89269676ac3f44352582e4f42e2c2c2898363cc3a76403d
+  conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows)
+  languageName: node
+  linkType: hard
+
+"@stdlib/string@npm:^0.0.x":
+  version: 0.0.14
+  resolution: "@stdlib/string@npm:0.0.14"
+  dependencies:
+    "@stdlib/assert": ^0.0.x
+    "@stdlib/cli": ^0.0.x
+    "@stdlib/constants": ^0.0.x
+    "@stdlib/fs": ^0.0.x
+    "@stdlib/math": ^0.0.x
+    "@stdlib/nlp": ^0.0.x
+    "@stdlib/process": ^0.0.x
+    "@stdlib/regexp": ^0.0.x
+    "@stdlib/streams": ^0.0.x
+    "@stdlib/types": ^0.0.x
+    "@stdlib/utils": ^0.0.x
+  checksum: aaaaaddf381cccc67f15dbab76f43ce81cb71a4f5595bfa06ef915b6747458deca3c25c60ff3c002c0c36482687d92a150f364069559dfea915f63a040d5f603
+  conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows)
+  languageName: node
+  linkType: hard
+
+"@stdlib/symbol@npm:^0.0.x":
+  version: 0.0.12
+  resolution: "@stdlib/symbol@npm:0.0.12"
+  dependencies:
+    "@stdlib/assert": ^0.0.x
+    "@stdlib/utils": ^0.0.x
+  checksum: 2263341ce0296de2063d26038902bd63bf1d7b820307402fdf38c3b248bd026f17d96bccdc3189fd9fcc9c83a778eaab797dc11805bd66203b8ac9c6934f6588
+  conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows)
+  languageName: node
+  linkType: hard
+
+"@stdlib/time@npm:^0.0.x":
+  version: 0.0.14
+  resolution: "@stdlib/time@npm:0.0.14"
+  dependencies:
+    "@stdlib/assert": ^0.0.x
+    "@stdlib/cli": ^0.0.x
+    "@stdlib/constants": ^0.0.x
+    "@stdlib/fs": ^0.0.x
+    "@stdlib/math": ^0.0.x
+    "@stdlib/string": ^0.0.x
+    "@stdlib/utils": ^0.0.x
+  checksum: 6e8a1b985a09936ab09c98d44bf1b2c79e08995c3c73401494bc1f6f708747ef136d769af4809a8af92a9ceb3d390db6c4c4e01608cd8d794a86c4b57e343eb1
+  conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows)
+  languageName: node
+  linkType: hard
+
+"@stdlib/types@npm:^0.0.x":
+  version: 0.0.14
+  resolution: "@stdlib/types@npm:0.0.14"
+  checksum: 5680a655ddb3ad730f5c7eb2363a43e089f3e6a1b85b12546cab49f7749bb3baf293bd50fbfe55486f233f4227f1020b65eb461b754b94fb4a4bc2799647ec22
+  conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows)
+  languageName: node
+  linkType: hard
+
+"@stdlib/utils@npm:^0.0.x":
+  version: 0.0.12
+  resolution: "@stdlib/utils@npm:0.0.12"
+  dependencies:
+    "@stdlib/array": ^0.0.x
+    "@stdlib/assert": ^0.0.x
+    "@stdlib/blas": ^0.0.x
+    "@stdlib/buffer": ^0.0.x
+    "@stdlib/cli": ^0.0.x
+    "@stdlib/constants": ^0.0.x
+    "@stdlib/fs": ^0.0.x
+    "@stdlib/math": ^0.0.x
+    "@stdlib/os": ^0.0.x
+    "@stdlib/process": ^0.0.x
+    "@stdlib/random": ^0.0.x
+    "@stdlib/regexp": ^0.0.x
+    "@stdlib/streams": ^0.0.x
+    "@stdlib/string": ^0.0.x
+    "@stdlib/symbol": ^0.0.x
+    "@stdlib/time": ^0.0.x
+    "@stdlib/types": ^0.0.x
+    debug: ^2.6.9
+  checksum: e0c3671c5f62c11bb3abd721f2958c41641b00a75d449bd25fbb62bcb8689cfe9c1f600c0688e7b6819ae870d6e5974d0fc7b2ec86081c45d9194b316b2a2ec2
+  conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows)
+  languageName: node
+  linkType: hard
+
+"@types/estree@npm:^1.0.0":
+  version: 1.0.4
+  resolution: "@types/estree@npm:1.0.4"
+  checksum: dcd08e6e967def3afff745774b6b9b912d6394ddacbb3e8be05bb291c1803f5f03f1ab0eeb852bf8a85ca14842663f461f3dac82179dcdccbf45fbc067673bbc
+  languageName: node
+  linkType: hard
+
+"@types/geojson@npm:7946.0.4":
+  version: 7946.0.4
+  resolution: "@types/geojson@npm:7946.0.4"
+  checksum: 541aea46540c918b9fe21ab73f497fe17b1eaf4d0d3baeb5f5614029b7f488c37f63843b644c024a8178dc2fb66d3d6623c25d9cf61d7b553aa19c8dc7f99047
+  languageName: node
+  linkType: hard
+
+"@types/prop-types@npm:*":
+  version: 15.7.9
+  resolution: "@types/prop-types@npm:15.7.9"
+  checksum: c7591d3ff7593e243908a07e1d3e2bb6e8879008af5800d8378115a90d0fdf669a1cae72a6d7f69e59c4fa7bb4c8ed61f6ebc1c520fe110c6f2b03ac02414072
+  languageName: node
+  linkType: hard
+
+"@types/react@npm:^18.0.26":
+  version: 18.2.34
+  resolution: "@types/react@npm:18.2.34"
+  dependencies:
+    "@types/prop-types": "*"
+    "@types/scheduler": "*"
+    csstype: ^3.0.2
+  checksum: 16446542228cba827143caf0ecb4718cbf02ae5befd4a6bc6d67ed144fe1c0cb4b06b20facf3d2b972d86c67a17cc82f5ec8a03fce42d50e12b2dcd0592fc66e
+  languageName: node
+  linkType: hard
+
+"@types/scheduler@npm:*":
+  version: 0.16.5
+  resolution: "@types/scheduler@npm:0.16.5"
+  checksum: 5aae67331bb7877edc65f77f205fb03c3808d9e51c186afe26945ce69f4072886629580a751e9ce8573e4a7538d0dfa1e4ce388c7c451fa689a4c592fdf1ea45
+  languageName: node
+  linkType: hard
+
+"@vscode/debugprotocol@npm:^1.51.0":
+  version: 1.64.0
+  resolution: "@vscode/debugprotocol@npm:1.64.0"
+  checksum: 1c8a3d6dba035674a9b4ec1b2f5e98d75170fe86cd98cf3d05cdced40d0ee0c3371f3d291516a1903f70cc5a9beadb70048d1ffc71a778bca6767bbeecb716ab
+  languageName: node
+  linkType: hard
+
+"abbrev@npm:^2.0.0":
+  version: 2.0.0
+  resolution: "abbrev@npm:2.0.0"
+  checksum: 0e994ad2aa6575f94670d8a2149afe94465de9cedaaaac364e7fb43a40c3691c980ff74899f682f4ca58fa96b4cbd7421a015d3a6defe43a442117d7821a2f36
+  languageName: node
+  linkType: hard
+
+"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0":
+  version: 7.1.0
+  resolution: "agent-base@npm:7.1.0"
+  dependencies:
+    debug: ^4.3.4
+  checksum: f7828f991470a0cc22cb579c86a18cbae83d8a3cbed39992ab34fc7217c4d126017f1c74d0ab66be87f71455318a8ea3e757d6a37881b8d0f2a2c6aa55e5418f
+  languageName: node
+  linkType: hard
+
+"aggregate-error@npm:^3.0.0":
+  version: 3.1.0
+  resolution: "aggregate-error@npm:3.1.0"
+  dependencies:
+    clean-stack: ^2.0.0
+    indent-string: ^4.0.0
+  checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79
+  languageName: node
+  linkType: hard
+
+"ajv@npm:^8.12.0":
+  version: 8.12.0
+  resolution: "ajv@npm:8.12.0"
+  dependencies:
+    fast-deep-equal: ^3.1.1
+    json-schema-traverse: ^1.0.0
+    require-from-string: ^2.0.2
+    uri-js: ^4.2.2
+  checksum: 4dc13714e316e67537c8b31bc063f99a1d9d9a497eb4bbd55191ac0dcd5e4985bbb71570352ad6f1e76684fb6d790928f96ba3b2d4fd6e10024be9612fe3f001
+  languageName: node
+  linkType: hard
+
+"ansi-regex@npm:^5.0.1":
+  version: 5.0.1
+  resolution: "ansi-regex@npm:5.0.1"
+  checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b
+  languageName: node
+  linkType: hard
+
+"ansi-regex@npm:^6.0.1":
+  version: 6.0.1
+  resolution: "ansi-regex@npm:6.0.1"
+  checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169
+  languageName: node
+  linkType: hard
+
+"ansi-styles@npm:^4.0.0":
+  version: 4.3.0
+  resolution: "ansi-styles@npm:4.3.0"
+  dependencies:
+    color-convert: ^2.0.1
+  checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4
+  languageName: node
+  linkType: hard
+
+"ansi-styles@npm:^6.1.0":
+  version: 6.2.1
+  resolution: "ansi-styles@npm:6.2.1"
+  checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9
+  languageName: node
+  linkType: hard
+
+"balanced-match@npm:^1.0.0":
+  version: 1.0.2
+  resolution: "balanced-match@npm:1.0.2"
+  checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65
+  languageName: node
+  linkType: hard
+
+"brace-expansion@npm:^2.0.1":
+  version: 2.0.1
+  resolution: "brace-expansion@npm:2.0.1"
+  dependencies:
+    balanced-match: ^1.0.0
+  checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1
+  languageName: node
+  linkType: hard
+
+"cacache@npm:^18.0.0":
+  version: 18.0.0
+  resolution: "cacache@npm:18.0.0"
+  dependencies:
+    "@npmcli/fs": ^3.1.0
+    fs-minipass: ^3.0.0
+    glob: ^10.2.2
+    lru-cache: ^10.0.1
+    minipass: ^7.0.3
+    minipass-collect: ^1.0.2
+    minipass-flush: ^1.0.5
+    minipass-pipeline: ^1.2.4
+    p-map: ^4.0.0
+    ssri: ^10.0.0
+    tar: ^6.1.11
+    unique-filename: ^3.0.0
+  checksum: 2cd6bf15551abd4165acb3a4d1ef0593b3aa2fd6853ae16b5bb62199c2faecf27d36555a9545c0e07dd03347ec052e782923bdcece724a24611986aafb53e152
+  languageName: node
+  linkType: hard
+
+"chownr@npm:^2.0.0":
+  version: 2.0.0
+  resolution: "chownr@npm:2.0.0"
+  checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f
+  languageName: node
+  linkType: hard
+
+"clean-stack@npm:^2.0.0":
+  version: 2.2.0
+  resolution: "clean-stack@npm:2.2.0"
+  checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68
+  languageName: node
+  linkType: hard
+
+"cliui@npm:^8.0.1":
+  version: 8.0.1
+  resolution: "cliui@npm:8.0.1"
+  dependencies:
+    string-width: ^4.2.0
+    strip-ansi: ^6.0.1
+    wrap-ansi: ^7.0.0
+  checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56
+  languageName: node
+  linkType: hard
+
+"color-convert@npm:^2.0.1":
+  version: 2.0.1
+  resolution: "color-convert@npm:2.0.1"
+  dependencies:
+    color-name: ~1.1.4
+  checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336
+  languageName: node
+  linkType: hard
+
+"color-name@npm:~1.1.4":
+  version: 1.1.4
+  resolution: "color-name@npm:1.1.4"
+  checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610
+  languageName: node
+  linkType: hard
+
+"commander@npm:2":
+  version: 2.20.3
+  resolution: "commander@npm:2.20.3"
+  checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e
+  languageName: node
+  linkType: hard
+
+"commander@npm:7":
+  version: 7.2.0
+  resolution: "commander@npm:7.2.0"
+  checksum: 53501cbeee61d5157546c0bef0fedb6cdfc763a882136284bed9a07225f09a14b82d2a84e7637edfd1a679fb35ed9502fd58ef1d091e6287f60d790147f68ddc
+  languageName: node
+  linkType: hard
+
+"compute-gcd@npm:^1.2.1":
+  version: 1.2.1
+  resolution: "compute-gcd@npm:1.2.1"
+  dependencies:
+    validate.io-array: ^1.0.3
+    validate.io-function: ^1.0.2
+    validate.io-integer-array: ^1.0.0
+  checksum: 51cf33b75f7c8db5142fcb99a9d84a40260993fed8e02a7ab443834186c3ab99b3fd20b30ad9075a6a9d959d69df6da74dd3be8a59c78d9f2fe780ebda8242e1
+  languageName: node
+  linkType: hard
+
+"compute-lcm@npm:^1.1.2":
+  version: 1.1.2
+  resolution: "compute-lcm@npm:1.1.2"
+  dependencies:
+    compute-gcd: ^1.2.1
+    validate.io-array: ^1.0.3
+    validate.io-function: ^1.0.2
+    validate.io-integer-array: ^1.0.0
+  checksum: d499ab57dcb48e8d0fd233b99844a06d1cc56115602c920c586e998ebba60293731f5b6976e8a1e83ae6cbfe86716f62d9432e8d94913fed8bd8352f447dc917
+  languageName: node
+  linkType: hard
+
+"core-util-is@npm:~1.0.0":
+  version: 1.0.3
+  resolution: "core-util-is@npm:1.0.3"
+  checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99
+  languageName: node
+  linkType: hard
+
+"crelt@npm:^1.0.5":
+  version: 1.0.6
+  resolution: "crelt@npm:1.0.6"
+  checksum: dad842093371ad702afbc0531bfca2b0a8dd920b23a42f26e66dabbed9aad9acd5b9030496359545ef3937c3aced0fd4ac39f7a2d280a23ddf9eb7fdcb94a69f
+  languageName: node
+  linkType: hard
+
+"cross-spawn@npm:^7.0.0":
+  version: 7.0.3
+  resolution: "cross-spawn@npm:7.0.3"
+  dependencies:
+    path-key: ^3.1.0
+    shebang-command: ^2.0.0
+    which: ^2.0.1
+  checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52
+  languageName: node
+  linkType: hard
+
+"csstype@npm:3.0.10":
+  version: 3.0.10
+  resolution: "csstype@npm:3.0.10"
+  checksum: 20a8fa324f2b33ddf94aa7507d1b6ab3daa6f3cc308888dc50126585d7952f2471de69b2dbe0635d1fdc31223fef8e070842691877e725caf456e2378685a631
+  languageName: node
+  linkType: hard
+
+"csstype@npm:^3.0.2":
+  version: 3.1.2
+  resolution: "csstype@npm:3.1.2"
+  checksum: e1a52e6c25c1314d6beef5168da704ab29c5186b877c07d822bd0806717d9a265e8493a2e35ca7e68d0f5d472d43fac1cdce70fd79fd0853dff81f3028d857b5
+  languageName: node
+  linkType: hard
+
+"d3-array@npm:1 - 3, d3-array@npm:2 - 3, d3-array@npm:2.10.0 - 3, d3-array@npm:2.5.0 - 3, d3-array@npm:^3.2.2":
+  version: 3.2.4
+  resolution: "d3-array@npm:3.2.4"
+  dependencies:
+    internmap: 1 - 2
+  checksum: a5976a6d6205f69208478bb44920dd7ce3e788c9dceb86b304dbe401a4bfb42ecc8b04c20facde486e9adcb488b5d1800d49393a3f81a23902b68158e12cddd0
+  languageName: node
+  linkType: hard
+
+"d3-array@npm:3.2.2":
+  version: 3.2.2
+  resolution: "d3-array@npm:3.2.2"
+  dependencies:
+    internmap: 1 - 2
+  checksum: 98af3db792685ceca5d9c3721efba0c567520da5532b2c7a590fd83627a598ea225d11c2cecbad404dc154120feb5ea6df0ded38f82ddf342c714cfd0c6143d1
+  languageName: node
+  linkType: hard
+
+"d3-color@npm:1 - 3, d3-color@npm:^3.1.0":
+  version: 3.1.0
+  resolution: "d3-color@npm:3.1.0"
+  checksum: 4931fbfda5d7c4b5cfa283a13c91a954f86e3b69d75ce588d06cde6c3628cebfc3af2069ccf225e982e8987c612aa7948b3932163ce15eb3c11cd7c003f3ee3b
+  languageName: node
+  linkType: hard
+
+"d3-delaunay@npm:^6.0.2":
+  version: 6.0.4
+  resolution: "d3-delaunay@npm:6.0.4"
+  dependencies:
+    delaunator: 5
+  checksum: ce6d267d5ef21a8aeadfe4606329fc80a22ab6e7748d47bc220bcc396ee8be84b77a5473033954c5ac4aa522d265ddc45d4165d30fe4787dd60a15ea66b9bbb4
+  languageName: node
+  linkType: hard
+
+"d3-dispatch@npm:1 - 3":
+  version: 3.0.1
+  resolution: "d3-dispatch@npm:3.0.1"
+  checksum: fdfd4a230f46463e28e5b22a45dd76d03be9345b605e1b5dc7d18bd7ebf504e6c00ae123fd6d03e23d9e2711e01f0e14ea89cd0632545b9f0c00b924ba4be223
+  languageName: node
+  linkType: hard
+
+"d3-dsv@npm:^3.0.1":
+  version: 3.0.1
+  resolution: "d3-dsv@npm:3.0.1"
+  dependencies:
+    commander: 7
+    iconv-lite: 0.6
+    rw: 1
+  bin:
+    csv2json: bin/dsv2json.js
+    csv2tsv: bin/dsv2dsv.js
+    dsv2dsv: bin/dsv2dsv.js
+    dsv2json: bin/dsv2json.js
+    json2csv: bin/json2dsv.js
+    json2dsv: bin/json2dsv.js
+    json2tsv: bin/json2dsv.js
+    tsv2csv: bin/dsv2dsv.js
+    tsv2json: bin/dsv2json.js
+  checksum: 5fc0723647269d5dccd181d74f2265920ab368a2868b0b4f55ffa2fecdfb7814390ea28622cd61ee5d9594ab262879509059544e9f815c54fe76fbfb4ffa4c8a
+  languageName: node
+  linkType: hard
+
+"d3-force@npm:^3.0.0":
+  version: 3.0.0
+  resolution: "d3-force@npm:3.0.0"
+  dependencies:
+    d3-dispatch: 1 - 3
+    d3-quadtree: 1 - 3
+    d3-timer: 1 - 3
+  checksum: 6c7e96438cab62fa32aeadb0ade3297b62b51f81b1b38b0a60a5ec9fd627d74090c1189654d92df2250775f31b06812342f089f1d5947de9960a635ee3581def
+  languageName: node
+  linkType: hard
+
+"d3-format@npm:1 - 3, d3-format@npm:^3.1.0":
+  version: 3.1.0
+  resolution: "d3-format@npm:3.1.0"
+  checksum: f345ec3b8ad3cab19bff5dead395bd9f5590628eb97a389b1dd89f0b204c7c4fc1d9520f13231c2c7cf14b7c9a8cf10f8ef15bde2befbab41454a569bd706ca2
+  languageName: node
+  linkType: hard
+
+"d3-geo-projection@npm:^4.0.0":
+  version: 4.0.0
+  resolution: "d3-geo-projection@npm:4.0.0"
+  dependencies:
+    commander: 7
+    d3-array: 1 - 3
+    d3-geo: 1.12.0 - 3
+  bin:
+    geo2svg: bin/geo2svg.js
+    geograticule: bin/geograticule.js
+    geoproject: bin/geoproject.js
+    geoquantize: bin/geoquantize.js
+    geostitch: bin/geostitch.js
+  checksum: 631422b10dd78d1047ba5a3b073148bea27721060bd7087a5fa6c053ca80445d26432e505e0e3acbd6e0d76cf577c61bf9a5db70dabbc9310c493de1f7ff736d
+  languageName: node
+  linkType: hard
+
+"d3-geo@npm:1.12.0 - 3, d3-geo@npm:^3.1.0":
+  version: 3.1.0
+  resolution: "d3-geo@npm:3.1.0"
+  dependencies:
+    d3-array: 2.5.0 - 3
+  checksum: adf82b0c105c0c5951ae0a833d4dfc479a563791ad7938579fa14e1cffd623b469d8aa7a37dc413a327fb6ac56880f3da3f6c43d4abe3c923972dd98f34f37d1
+  languageName: node
+  linkType: hard
+
+"d3-hierarchy@npm:^3.1.2":
+  version: 3.1.2
+  resolution: "d3-hierarchy@npm:3.1.2"
+  checksum: 0fd946a8c5fd4686d43d3e11bbfc2037a145fda29d2261ccd0e36f70b66af6d7638e2c0c7112124d63fc3d3127197a00a6aecf676bd5bd392a94d7235a214263
+  languageName: node
+  linkType: hard
+
+"d3-interpolate@npm:1.2.0 - 3, d3-interpolate@npm:^3.0.1":
+  version: 3.0.1
+  resolution: "d3-interpolate@npm:3.0.1"
+  dependencies:
+    d3-color: 1 - 3
+  checksum: a42ba314e295e95e5365eff0f604834e67e4a3b3c7102458781c477bd67e9b24b6bb9d8e41ff5521050a3f2c7c0c4bbbb6e187fd586daa3980943095b267e78b
+  languageName: node
+  linkType: hard
+
+"d3-path@npm:^3.1.0":
+  version: 3.1.0
+  resolution: "d3-path@npm:3.1.0"
+  checksum: 2306f1bd9191e1eac895ec13e3064f732a85f243d6e627d242a313f9777756838a2215ea11562f0c7630c7c3b16a19ec1fe0948b1c82f3317fac55882f6ee5d8
+  languageName: node
+  linkType: hard
+
+"d3-quadtree@npm:1 - 3":
+  version: 3.0.1
+  resolution: "d3-quadtree@npm:3.0.1"
+  checksum: 5469d462763811475f34a7294d984f3eb100515b0585ca5b249656f6b1a6e99b20056a2d2e463cc9944b888896d2b1d07859c50f9c0cf23438df9cd2e3146066
+  languageName: node
+  linkType: hard
+
+"d3-scale@npm:^4.0.2":
+  version: 4.0.2
+  resolution: "d3-scale@npm:4.0.2"
+  dependencies:
+    d3-array: 2.10.0 - 3
+    d3-format: 1 - 3
+    d3-interpolate: 1.2.0 - 3
+    d3-time: 2.1.1 - 3
+    d3-time-format: 2 - 4
+  checksum: a9c770d283162c3bd11477c3d9d485d07f8db2071665f1a4ad23eec3e515e2cefbd369059ec677c9ac849877d1a765494e90e92051d4f21111aa56791c98729e
+  languageName: node
+  linkType: hard
+
+"d3-shape@npm:^3.2.0":
+  version: 3.2.0
+  resolution: "d3-shape@npm:3.2.0"
+  dependencies:
+    d3-path: ^3.1.0
+  checksum: de2af5fc9a93036a7b68581ca0bfc4aca2d5a328aa7ba7064c11aedd44d24f310c20c40157cb654359d4c15c3ef369f95ee53d71221017276e34172c7b719cfa
+  languageName: node
+  linkType: hard
+
+"d3-time-format@npm:2 - 4, d3-time-format@npm:^4.1.0":
+  version: 4.1.0
+  resolution: "d3-time-format@npm:4.1.0"
+  dependencies:
+    d3-time: 1 - 3
+  checksum: 7342bce28355378152bbd4db4e275405439cabba082d9cd01946d40581140481c8328456d91740b0fe513c51ec4a467f4471ffa390c7e0e30ea30e9ec98fcdf4
+  languageName: node
+  linkType: hard
+
+"d3-time@npm:1 - 3, d3-time@npm:2.1.1 - 3, d3-time@npm:^3.1.0":
+  version: 3.1.0
+  resolution: "d3-time@npm:3.1.0"
+  dependencies:
+    d3-array: 2 - 3
+  checksum: 613b435352a78d9f31b7f68540788186d8c331b63feca60ad21c88e9db1989fe888f97f242322ebd6365e45ec3fb206a4324cd4ca0dfffa1d9b5feb856ba00a7
+  languageName: node
+  linkType: hard
+
+"d3-timer@npm:1 - 3, d3-timer@npm:^3.0.1":
+  version: 3.0.1
+  resolution: "d3-timer@npm:3.0.1"
+  checksum: 1cfddf86d7bca22f73f2c427f52dfa35c49f50d64e187eb788dcad6e927625c636aa18ae4edd44d084eb9d1f81d8ca4ec305dae7f733c15846a824575b789d73
+  languageName: node
+  linkType: hard
+
+"debug@npm:4, debug@npm:^4.3.4":
+  version: 4.3.4
+  resolution: "debug@npm:4.3.4"
+  dependencies:
+    ms: 2.1.2
+  peerDependenciesMeta:
+    supports-color:
+      optional: true
+  checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708
+  languageName: node
+  linkType: hard
+
+"debug@npm:^2.6.9":
+  version: 2.6.9
+  resolution: "debug@npm:2.6.9"
+  dependencies:
+    ms: 2.0.0
+  checksum: d2f51589ca66df60bf36e1fa6e4386b318c3f1e06772280eea5b1ae9fd3d05e9c2b7fd8a7d862457d00853c75b00451aa2d7459b924629ee385287a650f58fe6
+  languageName: node
+  linkType: hard
+
+"deepmerge@npm:^4.2.2":
+  version: 4.3.1
+  resolution: "deepmerge@npm:4.3.1"
+  checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052
+  languageName: node
+  linkType: hard
+
+"delaunator@npm:5":
+  version: 5.0.0
+  resolution: "delaunator@npm:5.0.0"
+  dependencies:
+    robust-predicates: ^3.0.0
+  checksum: d6764188442b7f7c6bcacebd96edc00e35f542a96f1af3ef600e586bfb9849a3682c489c0ab423440c90bc4c7cac77f28761babff76fa29e193e1cf50a95b860
+  languageName: node
+  linkType: hard
+
+"dom-serializer@npm:^1.0.1":
+  version: 1.4.1
+  resolution: "dom-serializer@npm:1.4.1"
+  dependencies:
+    domelementtype: ^2.0.1
+    domhandler: ^4.2.0
+    entities: ^2.0.0
+  checksum: fbb0b01f87a8a2d18e6e5a388ad0f7ec4a5c05c06d219377da1abc7bb0f674d804f4a8a94e3f71ff15f6cb7dcfc75704a54b261db672b9b3ab03da6b758b0b22
+  languageName: node
+  linkType: hard
+
+"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0":
+  version: 2.3.0
+  resolution: "domelementtype@npm:2.3.0"
+  checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6
+  languageName: node
+  linkType: hard
+
+"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0":
+  version: 4.3.1
+  resolution: "domhandler@npm:4.3.1"
+  dependencies:
+    domelementtype: ^2.2.0
+  checksum: 4c665ceed016e1911bf7d1dadc09dc888090b64dee7851cccd2fcf5442747ec39c647bb1cb8c8919f8bbdd0f0c625a6bafeeed4b2d656bbecdbae893f43ffaaa
+  languageName: node
+  linkType: hard
+
+"domutils@npm:^2.5.2":
+  version: 2.8.0
+  resolution: "domutils@npm:2.8.0"
+  dependencies:
+    dom-serializer: ^1.0.1
+    domelementtype: ^2.2.0
+    domhandler: ^4.2.0
+  checksum: abf7434315283e9aadc2a24bac0e00eab07ae4313b40cc239f89d84d7315ebdfd2fb1b5bf750a96bc1b4403d7237c7b2ebf60459be394d625ead4ca89b934391
+  languageName: node
+  linkType: hard
+
+"eastasianwidth@npm:^0.2.0":
+  version: 0.2.0
+  resolution: "eastasianwidth@npm:0.2.0"
+  checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed
+  languageName: node
+  linkType: hard
+
+"emoji-regex@npm:^8.0.0":
+  version: 8.0.0
+  resolution: "emoji-regex@npm:8.0.0"
+  checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192
+  languageName: node
+  linkType: hard
+
+"emoji-regex@npm:^9.2.2":
+  version: 9.2.2
+  resolution: "emoji-regex@npm:9.2.2"
+  checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601
+  languageName: node
+  linkType: hard
+
+"encoding@npm:^0.1.13":
+  version: 0.1.13
+  resolution: "encoding@npm:0.1.13"
+  dependencies:
+    iconv-lite: ^0.6.2
+  checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f
+  languageName: node
+  linkType: hard
+
+"entities@npm:^2.0.0":
+  version: 2.2.0
+  resolution: "entities@npm:2.2.0"
+  checksum: 19010dacaf0912c895ea262b4f6128574f9ccf8d4b3b65c7e8334ad0079b3706376360e28d8843ff50a78aabcb8f08f0a32dbfacdc77e47ed77ca08b713669b3
+  languageName: node
+  linkType: hard
+
+"env-paths@npm:^2.2.0":
+  version: 2.2.1
+  resolution: "env-paths@npm:2.2.1"
+  checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e
+  languageName: node
+  linkType: hard
+
+"err-code@npm:^2.0.2":
+  version: 2.0.3
+  resolution: "err-code@npm:2.0.3"
+  checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54
+  languageName: node
+  linkType: hard
+
+"escalade@npm:^3.1.1":
+  version: 3.1.1
+  resolution: "escalade@npm:3.1.1"
+  checksum: a3e2a99f07acb74b3ad4989c48ca0c3140f69f923e56d0cba0526240ee470b91010f9d39001f2a4a313841d237ede70a729e92125191ba5d21e74b106800b133
+  languageName: node
+  linkType: hard
+
+"escape-string-regexp@npm:^4.0.0":
+  version: 4.0.0
+  resolution: "escape-string-regexp@npm:4.0.0"
+  checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5
+  languageName: node
+  linkType: hard
+
+"exponential-backoff@npm:^3.1.1":
+  version: 3.1.1
+  resolution: "exponential-backoff@npm:3.1.1"
+  checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48
+  languageName: node
+  linkType: hard
+
+"fast-deep-equal@npm:^3.1.1":
+  version: 3.1.3
+  resolution: "fast-deep-equal@npm:3.1.3"
+  checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d
+  languageName: node
+  linkType: hard
+
+"foreground-child@npm:^3.1.0":
+  version: 3.1.1
+  resolution: "foreground-child@npm:3.1.1"
+  dependencies:
+    cross-spawn: ^7.0.0
+    signal-exit: ^4.0.1
+  checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5
+  languageName: node
+  linkType: hard
+
+"free-style@npm:3.1.0":
+  version: 3.1.0
+  resolution: "free-style@npm:3.1.0"
+  checksum: 949258ae315deda48cac93ecd5f9a80f36e8a027e19ce2103598dc8d5ab60e963bbad5444b2a4990ddb746798dd188896f430285cf484afbf2141f7d75a191d8
+  languageName: node
+  linkType: hard
+
+"fs-extra@npm:^10.1.0":
+  version: 10.1.0
+  resolution: "fs-extra@npm:10.1.0"
+  dependencies:
+    graceful-fs: ^4.2.0
+    jsonfile: ^6.0.1
+    universalify: ^2.0.0
+  checksum: dc94ab37096f813cc3ca12f0f1b5ad6744dfed9ed21e953d72530d103cea193c2f81584a39e9dee1bea36de5ee66805678c0dddc048e8af1427ac19c00fffc50
+  languageName: node
+  linkType: hard
+
+"fs-minipass@npm:^2.0.0":
+  version: 2.1.0
+  resolution: "fs-minipass@npm:2.1.0"
+  dependencies:
+    minipass: ^3.0.0
+  checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1
+  languageName: node
+  linkType: hard
+
+"fs-minipass@npm:^3.0.0":
+  version: 3.0.3
+  resolution: "fs-minipass@npm:3.0.3"
+  dependencies:
+    minipass: ^7.0.3
+  checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802
+  languageName: node
+  linkType: hard
+
+"fsevents@npm:2.3.2":
+  version: 2.3.2
+  resolution: "fsevents@npm:2.3.2"
+  dependencies:
+    node-gyp: latest
+  checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f
+  conditions: os=darwin
+  languageName: node
+  linkType: hard
+
+"fsevents@patch:fsevents@2.3.2#~builtin<compat/fsevents>":
+  version: 2.3.2
+  resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin<compat/fsevents>::version=2.3.2&hash=df0bf1"
+  dependencies:
+    node-gyp: latest
+  conditions: os=darwin
+  languageName: node
+  linkType: hard
+
+"get-caller-file@npm:^2.0.5":
+  version: 2.0.5
+  resolution: "get-caller-file@npm:2.0.5"
+  checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9
+  languageName: node
+  linkType: hard
+
+"glob@npm:^10.2.2, glob@npm:^10.3.10":
+  version: 10.3.10
+  resolution: "glob@npm:10.3.10"
+  dependencies:
+    foreground-child: ^3.1.0
+    jackspeak: ^2.3.5
+    minimatch: ^9.0.1
+    minipass: ^5.0.0 || ^6.0.2 || ^7.0.0
+    path-scurry: ^1.10.1
+  bin:
+    glob: dist/esm/bin.mjs
+  checksum: 4f2fe2511e157b5a3f525a54092169a5f92405f24d2aed3142f4411df328baca13059f4182f1db1bf933e2c69c0bd89e57ae87edd8950cba8c7ccbe84f721cf3
+  languageName: node
+  linkType: hard
+
+"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6":
+  version: 4.2.11
+  resolution: "graceful-fs@npm:4.2.11"
+  checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7
+  languageName: node
+  linkType: hard
+
+"htmlparser2@npm:^6.0.0":
+  version: 6.1.0
+  resolution: "htmlparser2@npm:6.1.0"
+  dependencies:
+    domelementtype: ^2.0.1
+    domhandler: ^4.0.0
+    domutils: ^2.5.2
+    entities: ^2.0.0
+  checksum: 81a7b3d9c3bb9acb568a02fc9b1b81ffbfa55eae7f1c41ae0bf840006d1dbf54cb3aa245b2553e2c94db674840a9f0fdad7027c9a9d01a062065314039058c4e
+  languageName: node
+  linkType: hard
+
+"http-cache-semantics@npm:^4.1.1":
+  version: 4.1.1
+  resolution: "http-cache-semantics@npm:4.1.1"
+  checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236
+  languageName: node
+  linkType: hard
+
+"http-proxy-agent@npm:^7.0.0":
+  version: 7.0.0
+  resolution: "http-proxy-agent@npm:7.0.0"
+  dependencies:
+    agent-base: ^7.1.0
+    debug: ^4.3.4
+  checksum: 48d4fac997917e15f45094852b63b62a46d0c8a4f0b9c6c23ca26d27b8df8d178bed88389e604745e748bd9a01f5023e25093722777f0593c3f052009ff438b6
+  languageName: node
+  linkType: hard
+
+"https-proxy-agent@npm:^7.0.1":
+  version: 7.0.2
+  resolution: "https-proxy-agent@npm:7.0.2"
+  dependencies:
+    agent-base: ^7.0.2
+    debug: 4
+  checksum: 088969a0dd476ea7a0ed0a2cf1283013682b08f874c3bc6696c83fa061d2c157d29ef0ad3eb70a2046010bb7665573b2388d10fdcb3e410a66995e5248444292
+  languageName: node
+  linkType: hard
+
+"iconv-lite@npm:0.6, iconv-lite@npm:^0.6.2":
+  version: 0.6.3
+  resolution: "iconv-lite@npm:0.6.3"
+  dependencies:
+    safer-buffer: ">= 2.1.2 < 3.0.0"
+  checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf
+  languageName: node
+  linkType: hard
+
+"imurmurhash@npm:^0.1.4":
+  version: 0.1.4
+  resolution: "imurmurhash@npm:0.1.4"
+  checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7
+  languageName: node
+  linkType: hard
+
+"indent-string@npm:^4.0.0":
+  version: 4.0.0
+  resolution: "indent-string@npm:4.0.0"
+  checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612
+  languageName: node
+  linkType: hard
+
+"inherits@npm:2.0.3":
+  version: 2.0.3
+  resolution: "inherits@npm:2.0.3"
+  checksum: 78cb8d7d850d20a5e9a7f3620db31483aa00ad5f722ce03a55b110e5a723539b3716a3b463e2b96ce3fe286f33afc7c131fa2f91407528ba80cea98a7545d4c0
+  languageName: node
+  linkType: hard
+
+"inherits@npm:~2.0.3":
+  version: 2.0.4
+  resolution: "inherits@npm:2.0.4"
+  checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1
+  languageName: node
+  linkType: hard
+
+"internmap@npm:1 - 2":
+  version: 2.0.3
+  resolution: "internmap@npm:2.0.3"
+  checksum: 7ca41ec6aba8f0072fc32fa8a023450a9f44503e2d8e403583c55714b25efd6390c38a87161ec456bf42d7bc83aab62eb28f5aef34876b1ac4e60693d5e1d241
+  languageName: node
+  linkType: hard
+
+"ip@npm:^2.0.0":
+  version: 2.0.0
+  resolution: "ip@npm:2.0.0"
+  checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349
+  languageName: node
+  linkType: hard
+
+"is-fullwidth-code-point@npm:^3.0.0":
+  version: 3.0.0
+  resolution: "is-fullwidth-code-point@npm:3.0.0"
+  checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348
+  languageName: node
+  linkType: hard
+
+"is-lambda@npm:^1.0.1":
+  version: 1.0.1
+  resolution: "is-lambda@npm:1.0.1"
+  checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35
+  languageName: node
+  linkType: hard
+
+"is-plain-object@npm:^5.0.0":
+  version: 5.0.0
+  resolution: "is-plain-object@npm:5.0.0"
+  checksum: e32d27061eef62c0847d303125440a38660517e586f2f3db7c9d179ae5b6674ab0f469d519b2e25c147a1a3bc87156d0d5f4d8821e0ce4a9ee7fe1fcf11ce45c
+  languageName: node
+  linkType: hard
+
+"isarray@npm:~1.0.0":
+  version: 1.0.0
+  resolution: "isarray@npm:1.0.0"
+  checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab
+  languageName: node
+  linkType: hard
+
+"isexe@npm:^2.0.0":
+  version: 2.0.0
+  resolution: "isexe@npm:2.0.0"
+  checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62
+  languageName: node
+  linkType: hard
+
+"isexe@npm:^3.1.1":
+  version: 3.1.1
+  resolution: "isexe@npm:3.1.1"
+  checksum: 7fe1931ee4e88eb5aa524cd3ceb8c882537bc3a81b02e438b240e47012eef49c86904d0f0e593ea7c3a9996d18d0f1f3be8d3eaa92333977b0c3a9d353d5563e
+  languageName: node
+  linkType: hard
+
+"isomorphic.js@npm:^0.2.4":
+  version: 0.2.5
+  resolution: "isomorphic.js@npm:0.2.5"
+  checksum: d8d1b083f05f3c337a06628b982ac3ce6db953bbef14a9de8ad49131250c3592f864b73c12030fdc9ef138ce97b76ef55c7d96a849561ac215b1b4b9d301c8e9
+  languageName: node
+  linkType: hard
+
+"jackspeak@npm:^2.3.5":
+  version: 2.3.6
+  resolution: "jackspeak@npm:2.3.6"
+  dependencies:
+    "@isaacs/cliui": ^8.0.2
+    "@pkgjs/parseargs": ^0.11.0
+  dependenciesMeta:
+    "@pkgjs/parseargs":
+      optional: true
+  checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54
+  languageName: node
+  linkType: hard
+
+"js-tokens@npm:^3.0.0 || ^4.0.0":
+  version: 4.0.0
+  resolution: "js-tokens@npm:4.0.0"
+  checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78
+  languageName: node
+  linkType: hard
+
+"json-schema-compare@npm:^0.2.2":
+  version: 0.2.2
+  resolution: "json-schema-compare@npm:0.2.2"
+  dependencies:
+    lodash: ^4.17.4
+  checksum: dd6f2173857c8e3b77d6ebdfa05bd505bba5b08709ab46b532722f5d1c33b5fee1fc8f3c97d0c0d011db25f9f3b0baf7ab783bb5f55c32abd9f1201760e43c2c
+  languageName: node
+  linkType: hard
+
+"json-schema-merge-allof@npm:^0.8.1":
+  version: 0.8.1
+  resolution: "json-schema-merge-allof@npm:0.8.1"
+  dependencies:
+    compute-lcm: ^1.1.2
+    json-schema-compare: ^0.2.2
+    lodash: ^4.17.20
+  checksum: 82700f6ac77351959138d6b153d77375a8c29cf48d907241b85c8292dd77aabd8cb816400f2b0d17062c4ccc8893832ec4f664ab9c814927ef502e7a595ea873
+  languageName: node
+  linkType: hard
+
+"json-schema-traverse@npm:^1.0.0":
+  version: 1.0.0
+  resolution: "json-schema-traverse@npm:1.0.0"
+  checksum: 02f2f466cdb0362558b2f1fd5e15cce82ef55d60cd7f8fa828cf35ba74330f8d767fcae5c5c2adb7851fa811766c694b9405810879bc4e1ddd78a7c0e03658ad
+  languageName: node
+  linkType: hard
+
+"json-stringify-pretty-compact@npm:~3.0.0":
+  version: 3.0.0
+  resolution: "json-stringify-pretty-compact@npm:3.0.0"
+  checksum: 01ab5c5c8260299414868d96db97f53aef93c290fe469edd9a1363818e795006e01c952fa2fd7b47cbbab506d5768998eccc25e1da4fa2ccfebd1788c6098791
+  languageName: node
+  linkType: hard
+
+"json5@npm:^2.2.3":
+  version: 2.2.3
+  resolution: "json5@npm:2.2.3"
+  bin:
+    json5: lib/cli.js
+  checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349
+  languageName: node
+  linkType: hard
+
+"jsonfile@npm:^6.0.1":
+  version: 6.1.0
+  resolution: "jsonfile@npm:6.1.0"
+  dependencies:
+    graceful-fs: ^4.1.6
+    universalify: ^2.0.0
+  dependenciesMeta:
+    graceful-fs:
+      optional: true
+  checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354
+  languageName: node
+  linkType: hard
+
+"jsonpointer@npm:^5.0.1":
+  version: 5.0.1
+  resolution: "jsonpointer@npm:5.0.1"
+  checksum: 0b40f712900ad0c846681ea2db23b6684b9d5eedf55807b4708c656f5894b63507d0e28ae10aa1bddbea551241035afe62b6df0800fc94c2e2806a7f3adecd7c
+  languageName: node
+  linkType: hard
+
+"jupyterlab-execute-time-ui-tests@workspace:.":
+  version: 0.0.0-use.local
+  resolution: "jupyterlab-execute-time-ui-tests@workspace:."
+  dependencies:
+    "@jupyterlab/galata": ^5.0.5
+    "@playwright/test": ^1.37.0
+  languageName: unknown
+  linkType: soft
+
+"lib0@npm:^0.2.74, lib0@npm:^0.2.85":
+  version: 0.2.87
+  resolution: "lib0@npm:0.2.87"
+  dependencies:
+    isomorphic.js: ^0.2.4
+  bin:
+    0gentesthtml: bin/gentesthtml.js
+    0serve: bin/0serve.js
+  checksum: c50f4ed27e4df1a8fe8846251740e3757ac37146087a3b14f23240aa654174ccaf62f4f516cfa162fae019f82cdc0483b78310dd8410ac5fc8b5092b4d2e0b5d
+  languageName: node
+  linkType: hard
+
+"lodash-es@npm:^4.17.21":
+  version: 4.17.21
+  resolution: "lodash-es@npm:4.17.21"
+  checksum: 05cbffad6e2adbb331a4e16fbd826e7faee403a1a04873b82b42c0f22090f280839f85b95393f487c1303c8a3d2a010048bf06151a6cbe03eee4d388fb0a12d2
+  languageName: node
+  linkType: hard
+
+"lodash.escape@npm:^4.0.1":
+  version: 4.0.1
+  resolution: "lodash.escape@npm:4.0.1"
+  checksum: fcb54f457497256964d619d5cccbd80a961916fca60df3fe0fa3e7f052715c2944c0ed5aefb4f9e047d127d44aa2d55555f3350cb42c6549e9e293fb30b41e7f
+  languageName: node
+  linkType: hard
+
+"lodash.mergewith@npm:^4.6.1":
+  version: 4.6.2
+  resolution: "lodash.mergewith@npm:4.6.2"
+  checksum: a6db2a9339752411f21b956908c404ec1e088e783a65c8b29e30ae5b3b6384f82517662d6f425cc97c2070b546cc2c7daaa8d33f78db7b6e9be06cd834abdeb8
+  languageName: node
+  linkType: hard
+
+"lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4":
+  version: 4.17.21
+  resolution: "lodash@npm:4.17.21"
+  checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7
+  languageName: node
+  linkType: hard
+
+"loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0":
+  version: 1.4.0
+  resolution: "loose-envify@npm:1.4.0"
+  dependencies:
+    js-tokens: ^3.0.0 || ^4.0.0
+  bin:
+    loose-envify: cli.js
+  checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4
+  languageName: node
+  linkType: hard
+
+"lru-cache@npm:^10.0.1, lru-cache@npm:^9.1.1 || ^10.0.0":
+  version: 10.0.1
+  resolution: "lru-cache@npm:10.0.1"
+  checksum: 06f8d0e1ceabd76bb6f644a26dbb0b4c471b79c7b514c13c6856113879b3bf369eb7b497dad4ff2b7e2636db202412394865b33c332100876d838ad1372f0181
+  languageName: node
+  linkType: hard
+
+"lru-cache@npm:^6.0.0":
+  version: 6.0.0
+  resolution: "lru-cache@npm:6.0.0"
+  dependencies:
+    yallist: ^4.0.0
+  checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297
+  languageName: node
+  linkType: hard
+
+"make-fetch-happen@npm:^13.0.0":
+  version: 13.0.0
+  resolution: "make-fetch-happen@npm:13.0.0"
+  dependencies:
+    "@npmcli/agent": ^2.0.0
+    cacache: ^18.0.0
+    http-cache-semantics: ^4.1.1
+    is-lambda: ^1.0.1
+    minipass: ^7.0.2
+    minipass-fetch: ^3.0.0
+    minipass-flush: ^1.0.5
+    minipass-pipeline: ^1.2.4
+    negotiator: ^0.6.3
+    promise-retry: ^2.0.1
+    ssri: ^10.0.0
+  checksum: 7c7a6d381ce919dd83af398b66459a10e2fe8f4504f340d1d090d3fa3d1b0c93750220e1d898114c64467223504bd258612ba83efbc16f31b075cd56de24b4af
+  languageName: node
+  linkType: hard
+
+"markdown-to-jsx@npm:^7.3.2":
+  version: 7.3.2
+  resolution: "markdown-to-jsx@npm:7.3.2"
+  peerDependencies:
+    react: ">= 0.14.0"
+  checksum: 8885c6343b71570b0a7ec16cd85a49b853a830234790ee7430e2517ea5d8d361ff138bd52147f650790f3e7b3a28a15c755fc16f8856dd01ddf09a6161782e06
+  languageName: node
+  linkType: hard
+
+"minimatch@npm:^9.0.1":
+  version: 9.0.3
+  resolution: "minimatch@npm:9.0.3"
+  dependencies:
+    brace-expansion: ^2.0.1
+  checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5
+  languageName: node
+  linkType: hard
+
+"minimist@npm:^1.2.0, minimist@npm:~1.2.0":
+  version: 1.2.8
+  resolution: "minimist@npm:1.2.8"
+  checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0
+  languageName: node
+  linkType: hard
+
+"minipass-collect@npm:^1.0.2":
+  version: 1.0.2
+  resolution: "minipass-collect@npm:1.0.2"
+  dependencies:
+    minipass: ^3.0.0
+  checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10
+  languageName: node
+  linkType: hard
+
+"minipass-fetch@npm:^3.0.0":
+  version: 3.0.4
+  resolution: "minipass-fetch@npm:3.0.4"
+  dependencies:
+    encoding: ^0.1.13
+    minipass: ^7.0.3
+    minipass-sized: ^1.0.3
+    minizlib: ^2.1.2
+  dependenciesMeta:
+    encoding:
+      optional: true
+  checksum: af7aad15d5c128ab1ebe52e043bdf7d62c3c6f0cecb9285b40d7b395e1375b45dcdfd40e63e93d26a0e8249c9efd5c325c65575aceee192883970ff8cb11364a
+  languageName: node
+  linkType: hard
+
+"minipass-flush@npm:^1.0.5":
+  version: 1.0.5
+  resolution: "minipass-flush@npm:1.0.5"
+  dependencies:
+    minipass: ^3.0.0
+  checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf
+  languageName: node
+  linkType: hard
+
+"minipass-pipeline@npm:^1.2.4":
+  version: 1.2.4
+  resolution: "minipass-pipeline@npm:1.2.4"
+  dependencies:
+    minipass: ^3.0.0
+  checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b
+  languageName: node
+  linkType: hard
+
+"minipass-sized@npm:^1.0.3":
+  version: 1.0.3
+  resolution: "minipass-sized@npm:1.0.3"
+  dependencies:
+    minipass: ^3.0.0
+  checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60
+  languageName: node
+  linkType: hard
+
+"minipass@npm:^3.0.0":
+  version: 3.3.6
+  resolution: "minipass@npm:3.3.6"
+  dependencies:
+    yallist: ^4.0.0
+  checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48
+  languageName: node
+  linkType: hard
+
+"minipass@npm:^5.0.0":
+  version: 5.0.0
+  resolution: "minipass@npm:5.0.0"
+  checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea
+  languageName: node
+  linkType: hard
+
+"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3":
+  version: 7.0.4
+  resolution: "minipass@npm:7.0.4"
+  checksum: 87585e258b9488caf2e7acea242fd7856bbe9a2c84a7807643513a338d66f368c7d518200ad7b70a508664d408aa000517647b2930c259a8b1f9f0984f344a21
+  languageName: node
+  linkType: hard
+
+"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2":
+  version: 2.1.2
+  resolution: "minizlib@npm:2.1.2"
+  dependencies:
+    minipass: ^3.0.0
+    yallist: ^4.0.0
+  checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3
+  languageName: node
+  linkType: hard
+
+"mkdirp@npm:^1.0.3":
+  version: 1.0.4
+  resolution: "mkdirp@npm:1.0.4"
+  bin:
+    mkdirp: bin/cmd.js
+  checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f
+  languageName: node
+  linkType: hard
+
+"ms@npm:2.0.0":
+  version: 2.0.0
+  resolution: "ms@npm:2.0.0"
+  checksum: 0e6a22b8b746d2e0b65a430519934fefd41b6db0682e3477c10f60c76e947c4c0ad06f63ffdf1d78d335f83edee8c0aa928aa66a36c7cd95b69b26f468d527f4
+  languageName: node
+  linkType: hard
+
+"ms@npm:2.1.2":
+  version: 2.1.2
+  resolution: "ms@npm:2.1.2"
+  checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f
+  languageName: node
+  linkType: hard
+
+"nanoid@npm:^3.3.6":
+  version: 3.3.6
+  resolution: "nanoid@npm:3.3.6"
+  bin:
+    nanoid: bin/nanoid.cjs
+  checksum: 7d0eda657002738aa5206107bd0580aead6c95c460ef1bdd0b1a87a9c7ae6277ac2e9b945306aaa5b32c6dcb7feaf462d0f552e7f8b5718abfc6ead5c94a71b3
+  languageName: node
+  linkType: hard
+
+"negotiator@npm:^0.6.3":
+  version: 0.6.3
+  resolution: "negotiator@npm:0.6.3"
+  checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9
+  languageName: node
+  linkType: hard
+
+"node-fetch@npm:^2.6.7":
+  version: 2.7.0
+  resolution: "node-fetch@npm:2.7.0"
+  dependencies:
+    whatwg-url: ^5.0.0
+  peerDependencies:
+    encoding: ^0.1.0
+  peerDependenciesMeta:
+    encoding:
+      optional: true
+  checksum: d76d2f5edb451a3f05b15115ec89fc6be39de37c6089f1b6368df03b91e1633fd379a7e01b7ab05089a25034b2023d959b47e59759cb38d88341b2459e89d6e5
+  languageName: node
+  linkType: hard
+
+"node-gyp@npm:latest":
+  version: 10.0.1
+  resolution: "node-gyp@npm:10.0.1"
+  dependencies:
+    env-paths: ^2.2.0
+    exponential-backoff: ^3.1.1
+    glob: ^10.3.10
+    graceful-fs: ^4.2.6
+    make-fetch-happen: ^13.0.0
+    nopt: ^7.0.0
+    proc-log: ^3.0.0
+    semver: ^7.3.5
+    tar: ^6.1.2
+    which: ^4.0.0
+  bin:
+    node-gyp: bin/node-gyp.js
+  checksum: 60a74e66d364903ce02049966303a57f898521d139860ac82744a5fdd9f7b7b3b61f75f284f3bfe6e6add3b8f1871ce305a1d41f775c7482de837b50c792223f
+  languageName: node
+  linkType: hard
+
+"nopt@npm:^7.0.0":
+  version: 7.2.0
+  resolution: "nopt@npm:7.2.0"
+  dependencies:
+    abbrev: ^2.0.0
+  bin:
+    nopt: bin/nopt.js
+  checksum: a9c0f57fb8cb9cc82ae47192ca2b7ef00e199b9480eed202482c962d61b59a7fbe7541920b2a5839a97b42ee39e288c0aed770e38057a608d7f579389dfde410
+  languageName: node
+  linkType: hard
+
+"object-assign@npm:^4.1.1":
+  version: 4.1.1
+  resolution: "object-assign@npm:4.1.1"
+  checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f
+  languageName: node
+  linkType: hard
+
+"p-map@npm:^4.0.0":
+  version: 4.0.0
+  resolution: "p-map@npm:4.0.0"
+  dependencies:
+    aggregate-error: ^3.0.0
+  checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c
+  languageName: node
+  linkType: hard
+
+"parse-srcset@npm:^1.0.2":
+  version: 1.0.2
+  resolution: "parse-srcset@npm:1.0.2"
+  checksum: 3a0380380c6082021fcce982f0b89fb8a493ce9dfd7d308e5e6d855201e80db8b90438649b31fdd82a3d6089a8ca17dccddaa2b730a718389af4c037b8539ebf
+  languageName: node
+  linkType: hard
+
+"path-browserify@npm:^1.0.0":
+  version: 1.0.1
+  resolution: "path-browserify@npm:1.0.1"
+  checksum: c6d7fa376423fe35b95b2d67990060c3ee304fc815ff0a2dc1c6c3cfaff2bd0d572ee67e18f19d0ea3bbe32e8add2a05021132ac40509416459fffee35200699
+  languageName: node
+  linkType: hard
+
+"path-key@npm:^3.1.0":
+  version: 3.1.1
+  resolution: "path-key@npm:3.1.1"
+  checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020
+  languageName: node
+  linkType: hard
+
+"path-scurry@npm:^1.10.1":
+  version: 1.10.1
+  resolution: "path-scurry@npm:1.10.1"
+  dependencies:
+    lru-cache: ^9.1.1 || ^10.0.0
+    minipass: ^5.0.0 || ^6.0.2 || ^7.0.0
+  checksum: e2557cff3a8fb8bc07afdd6ab163a92587884f9969b05bbbaf6fe7379348bfb09af9ed292af12ed32398b15fb443e81692047b786d1eeb6d898a51eb17ed7d90
+  languageName: node
+  linkType: hard
+
+"path@npm:~0.12.7":
+  version: 0.12.7
+  resolution: "path@npm:0.12.7"
+  dependencies:
+    process: ^0.11.1
+    util: ^0.10.3
+  checksum: 5dedb71e78fc008fcba797defc0b4e1cf06c1f18e0a631e03ba5bb505136f587ff017afc14f9a3d481cbe77aeedff7dc0c1d2ce4d820c1ebf3c4281ca49423a1
+  languageName: node
+  linkType: hard
+
+"picocolors@npm:^1.0.0":
+  version: 1.0.0
+  resolution: "picocolors@npm:1.0.0"
+  checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981
+  languageName: node
+  linkType: hard
+
+"playwright-core@npm:1.39.0":
+  version: 1.39.0
+  resolution: "playwright-core@npm:1.39.0"
+  bin:
+    playwright-core: cli.js
+  checksum: 556e78dee4f9890facf2af8249972e0d6e01a5ae98737b0f6b0166c660a95ffee4cb79350335b1ef96430a0ef01d3669daae9099fa46c8d403d11c623988238b
+  languageName: node
+  linkType: hard
+
+"playwright@npm:1.39.0":
+  version: 1.39.0
+  resolution: "playwright@npm:1.39.0"
+  dependencies:
+    fsevents: 2.3.2
+    playwright-core: 1.39.0
+  dependenciesMeta:
+    fsevents:
+      optional: true
+  bin:
+    playwright: cli.js
+  checksum: 96d8ca5aa25465c1c5d554d0d6071981d55e22477800ff8f5d47a53ca75193d60ece2df538a01b7165b3277dd5493c67603a5acda713029df7fbd95ce2417bc9
+  languageName: node
+  linkType: hard
+
+"postcss@npm:^8.3.11":
+  version: 8.4.31
+  resolution: "postcss@npm:8.4.31"
+  dependencies:
+    nanoid: ^3.3.6
+    picocolors: ^1.0.0
+    source-map-js: ^1.0.2
+  checksum: 1d8611341b073143ad90486fcdfeab49edd243377b1f51834dc4f6d028e82ce5190e4f11bb2633276864503654fb7cab28e67abdc0fbf9d1f88cad4a0ff0beea
+  languageName: node
+  linkType: hard
+
+"proc-log@npm:^3.0.0":
+  version: 3.0.0
+  resolution: "proc-log@npm:3.0.0"
+  checksum: 02b64e1b3919e63df06f836b98d3af002b5cd92655cab18b5746e37374bfb73e03b84fe305454614b34c25b485cc687a9eebdccf0242cda8fda2475dd2c97e02
+  languageName: node
+  linkType: hard
+
+"process-nextick-args@npm:~2.0.0":
+  version: 2.0.1
+  resolution: "process-nextick-args@npm:2.0.1"
+  checksum: 1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf
+  languageName: node
+  linkType: hard
+
+"process@npm:^0.11.1":
+  version: 0.11.10
+  resolution: "process@npm:0.11.10"
+  checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3
+  languageName: node
+  linkType: hard
+
+"promise-retry@npm:^2.0.1":
+  version: 2.0.1
+  resolution: "promise-retry@npm:2.0.1"
+  dependencies:
+    err-code: ^2.0.2
+    retry: ^0.12.0
+  checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429
+  languageName: node
+  linkType: hard
+
+"prop-types@npm:^15.8.1":
+  version: 15.8.1
+  resolution: "prop-types@npm:15.8.1"
+  dependencies:
+    loose-envify: ^1.4.0
+    object-assign: ^4.1.1
+    react-is: ^16.13.1
+  checksum: c056d3f1c057cb7ff8344c645450e14f088a915d078dcda795041765047fa080d38e5d626560ccaac94a4e16e3aa15f3557c1a9a8d1174530955e992c675e459
+  languageName: node
+  linkType: hard
+
+"punycode@npm:^2.1.0":
+  version: 2.3.1
+  resolution: "punycode@npm:2.3.1"
+  checksum: bb0a0ceedca4c3c57a9b981b90601579058903c62be23c5e8e843d2c2d4148a3ecf029d5133486fb0e1822b098ba8bba09e89d6b21742d02fa26bda6441a6fb2
+  languageName: node
+  linkType: hard
+
+"querystringify@npm:^2.1.1":
+  version: 2.2.0
+  resolution: "querystringify@npm:2.2.0"
+  checksum: 5641ea231bad7ef6d64d9998faca95611ed4b11c2591a8cae741e178a974f6a8e0ebde008475259abe1621cb15e692404e6b6626e927f7b849d5c09392604b15
+  languageName: node
+  linkType: hard
+
+"react-dom@npm:^18.2.0":
+  version: 18.2.0
+  resolution: "react-dom@npm:18.2.0"
+  dependencies:
+    loose-envify: ^1.1.0
+    scheduler: ^0.23.0
+  peerDependencies:
+    react: ^18.2.0
+  checksum: 7d323310bea3a91be2965f9468d552f201b1c27891e45ddc2d6b8f717680c95a75ae0bc1e3f5cf41472446a2589a75aed4483aee8169287909fcd59ad149e8cc
+  languageName: node
+  linkType: hard
+
+"react-is@npm:^16.13.1":
+  version: 16.13.1
+  resolution: "react-is@npm:16.13.1"
+  checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f
+  languageName: node
+  linkType: hard
+
+"react-is@npm:^18.2.0":
+  version: 18.2.0
+  resolution: "react-is@npm:18.2.0"
+  checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e
+  languageName: node
+  linkType: hard
+
+"react@npm:^18.2.0":
+  version: 18.2.0
+  resolution: "react@npm:18.2.0"
+  dependencies:
+    loose-envify: ^1.1.0
+  checksum: 88e38092da8839b830cda6feef2e8505dec8ace60579e46aa5490fc3dc9bba0bd50336507dc166f43e3afc1c42939c09fe33b25fae889d6f402721dcd78fca1b
+  languageName: node
+  linkType: hard
+
+"readable-stream@npm:^2.1.4":
+  version: 2.3.8
+  resolution: "readable-stream@npm:2.3.8"
+  dependencies:
+    core-util-is: ~1.0.0
+    inherits: ~2.0.3
+    isarray: ~1.0.0
+    process-nextick-args: ~2.0.0
+    safe-buffer: ~5.1.1
+    string_decoder: ~1.1.1
+    util-deprecate: ~1.0.1
+  checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42
+  languageName: node
+  linkType: hard
+
+"regexp-match-indices@npm:^1.0.2":
+  version: 1.0.2
+  resolution: "regexp-match-indices@npm:1.0.2"
+  dependencies:
+    regexp-tree: ^0.1.11
+  checksum: 8cc779f6cf8f404ead828d09970a7d4bd66bd78d43ab9eb2b5e65f2ef2ba1ed53536f5b5fa839fb90b350365fb44b6a851c7f16289afc3f37789c113ab2a7916
+  languageName: node
+  linkType: hard
+
+"regexp-tree@npm:^0.1.11":
+  version: 0.1.27
+  resolution: "regexp-tree@npm:0.1.27"
+  bin:
+    regexp-tree: bin/regexp-tree
+  checksum: 129aebb34dae22d6694ab2ac328be3f99105143737528ab072ef624d599afecbcfae1f5c96a166fa9e5f64fa1ecf30b411c4691e7924c3e11bbaf1712c260c54
+  languageName: node
+  linkType: hard
+
+"require-directory@npm:^2.1.1":
+  version: 2.1.1
+  resolution: "require-directory@npm:2.1.1"
+  checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80
+  languageName: node
+  linkType: hard
+
+"require-from-string@npm:^2.0.2":
+  version: 2.0.2
+  resolution: "require-from-string@npm:2.0.2"
+  checksum: a03ef6895445f33a4015300c426699bc66b2b044ba7b670aa238610381b56d3f07c686251740d575e22f4c87531ba662d06937508f0f3c0f1ddc04db3130560b
+  languageName: node
+  linkType: hard
+
+"requires-port@npm:^1.0.0":
+  version: 1.0.0
+  resolution: "requires-port@npm:1.0.0"
+  checksum: eee0e303adffb69be55d1a214e415cf42b7441ae858c76dfc5353148644f6fd6e698926fc4643f510d5c126d12a705e7c8ed7e38061113bdf37547ab356797ff
+  languageName: node
+  linkType: hard
+
+"retry@npm:^0.12.0":
+  version: 0.12.0
+  resolution: "retry@npm:0.12.0"
+  checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c
+  languageName: node
+  linkType: hard
+
+"robust-predicates@npm:^3.0.0":
+  version: 3.0.2
+  resolution: "robust-predicates@npm:3.0.2"
+  checksum: 36854c1321548ceca96d36ad9d6e0a5a512986029ec6929ad6ed3ec1612c22cc8b46cc72d2c5674af42e8074a119d793f6f0ea3a5b51373e3ab926c64b172d7a
+  languageName: node
+  linkType: hard
+
+"rw@npm:1":
+  version: 1.3.3
+  resolution: "rw@npm:1.3.3"
+  checksum: c20d82421f5a71c86a13f76121b751553a99cd4a70ea27db86f9b23f33db941f3f06019c30f60d50c356d0bd674c8e74764ac146ea55e217c091bde6fba82aa3
+  languageName: node
+  linkType: hard
+
+"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1":
+  version: 5.1.2
+  resolution: "safe-buffer@npm:5.1.2"
+  checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c
+  languageName: node
+  linkType: hard
+
+"safer-buffer@npm:>= 2.1.2 < 3.0.0":
+  version: 2.1.2
+  resolution: "safer-buffer@npm:2.1.2"
+  checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0
+  languageName: node
+  linkType: hard
+
+"sanitize-html@npm:~2.7.3":
+  version: 2.7.3
+  resolution: "sanitize-html@npm:2.7.3"
+  dependencies:
+    deepmerge: ^4.2.2
+    escape-string-regexp: ^4.0.0
+    htmlparser2: ^6.0.0
+    is-plain-object: ^5.0.0
+    parse-srcset: ^1.0.2
+    postcss: ^8.3.11
+  checksum: 2399d1fdbbc3a263fb413c1fe1971b3dc2b51abc6cc5cb49490624539d1c57a8fe31e2b21408c118e2a957f4e673e3169b1f9a5807654408f17b130a9d78aed7
+  languageName: node
+  linkType: hard
+
+"scheduler@npm:^0.23.0":
+  version: 0.23.0
+  resolution: "scheduler@npm:0.23.0"
+  dependencies:
+    loose-envify: ^1.1.0
+  checksum: d79192eeaa12abef860c195ea45d37cbf2bbf5f66e3c4dcd16f54a7da53b17788a70d109ee3d3dde1a0fd50e6a8fc171f4300356c5aee4fc0171de526bf35f8a
+  languageName: node
+  linkType: hard
+
+"semver@npm:^7.3.5":
+  version: 7.5.4
+  resolution: "semver@npm:7.5.4"
+  dependencies:
+    lru-cache: ^6.0.0
+  bin:
+    semver: bin/semver.js
+  checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3
+  languageName: node
+  linkType: hard
+
+"shebang-command@npm:^2.0.0":
+  version: 2.0.0
+  resolution: "shebang-command@npm:2.0.0"
+  dependencies:
+    shebang-regex: ^3.0.0
+  checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa
+  languageName: node
+  linkType: hard
+
+"shebang-regex@npm:^3.0.0":
+  version: 3.0.0
+  resolution: "shebang-regex@npm:3.0.0"
+  checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222
+  languageName: node
+  linkType: hard
+
+"signal-exit@npm:^4.0.1":
+  version: 4.1.0
+  resolution: "signal-exit@npm:4.1.0"
+  checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549
+  languageName: node
+  linkType: hard
+
+"smart-buffer@npm:^4.2.0":
+  version: 4.2.0
+  resolution: "smart-buffer@npm:4.2.0"
+  checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b
+  languageName: node
+  linkType: hard
+
+"socks-proxy-agent@npm:^8.0.1":
+  version: 8.0.2
+  resolution: "socks-proxy-agent@npm:8.0.2"
+  dependencies:
+    agent-base: ^7.0.2
+    debug: ^4.3.4
+    socks: ^2.7.1
+  checksum: 4fb165df08f1f380881dcd887b3cdfdc1aba3797c76c1e9f51d29048be6e494c5b06d68e7aea2e23df4572428f27a3ec22b3d7c75c570c5346507433899a4b6d
+  languageName: node
+  linkType: hard
+
+"socks@npm:^2.7.1":
+  version: 2.7.1
+  resolution: "socks@npm:2.7.1"
+  dependencies:
+    ip: ^2.0.0
+    smart-buffer: ^4.2.0
+  checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748
+  languageName: node
+  linkType: hard
+
+"source-map-js@npm:^1.0.2":
+  version: 1.0.2
+  resolution: "source-map-js@npm:1.0.2"
+  checksum: c049a7fc4deb9a7e9b481ae3d424cc793cb4845daa690bc5a05d428bf41bf231ced49b4cf0c9e77f9d42fdb3d20d6187619fc586605f5eabe995a316da8d377c
+  languageName: node
+  linkType: hard
+
+"ssri@npm:^10.0.0":
+  version: 10.0.5
+  resolution: "ssri@npm:10.0.5"
+  dependencies:
+    minipass: ^7.0.3
+  checksum: 0a31b65f21872dea1ed3f7c200d7bc1c1b91c15e419deca14f282508ba917cbb342c08a6814c7f68ca4ca4116dd1a85da2bbf39227480e50125a1ceffeecb750
+  languageName: node
+  linkType: hard
+
+"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3":
+  version: 4.2.3
+  resolution: "string-width@npm:4.2.3"
+  dependencies:
+    emoji-regex: ^8.0.0
+    is-fullwidth-code-point: ^3.0.0
+    strip-ansi: ^6.0.1
+  checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb
+  languageName: node
+  linkType: hard
+
+"string-width@npm:^5.0.1, string-width@npm:^5.1.2":
+  version: 5.1.2
+  resolution: "string-width@npm:5.1.2"
+  dependencies:
+    eastasianwidth: ^0.2.0
+    emoji-regex: ^9.2.2
+    strip-ansi: ^7.0.1
+  checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193
+  languageName: node
+  linkType: hard
+
+"string_decoder@npm:~1.1.1":
+  version: 1.1.1
+  resolution: "string_decoder@npm:1.1.1"
+  dependencies:
+    safe-buffer: ~5.1.0
+  checksum: 9ab7e56f9d60a28f2be697419917c50cac19f3e8e6c28ef26ed5f4852289fe0de5d6997d29becf59028556f2c62983790c1d9ba1e2a3cc401768ca12d5183a5b
+  languageName: node
+  linkType: hard
+
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1":
+  version: 6.0.1
+  resolution: "strip-ansi@npm:6.0.1"
+  dependencies:
+    ansi-regex: ^5.0.1
+  checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c
+  languageName: node
+  linkType: hard
+
+"strip-ansi@npm:^7.0.1":
+  version: 7.1.0
+  resolution: "strip-ansi@npm:7.1.0"
+  dependencies:
+    ansi-regex: ^6.0.1
+  checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d
+  languageName: node
+  linkType: hard
+
+"style-mod@npm:^4.0.0, style-mod@npm:^4.1.0":
+  version: 4.1.0
+  resolution: "style-mod@npm:4.1.0"
+  checksum: 8402b14ca11113a3640d46b3cf7ba49f05452df7846bc5185a3535d9b6a64a3019e7fb636b59ccbb7816aeb0725b24723e77a85b05612a9360e419958e13b4e6
+  languageName: node
+  linkType: hard
+
+"systeminformation@npm:^5.8.6":
+  version: 5.21.15
+  resolution: "systeminformation@npm:5.21.15"
+  bin:
+    systeminformation: lib/cli.js
+  checksum: 664d4821c23ab704c02fc020ac5c140849a415bdee4be8188256a6ef5d5f418b4373383636bfff94d10304e47b1765ba9c8bec04fd05ec81e7552e1e94593054
+  conditions: (os=darwin | os=linux | os=win32 | os=freebsd | os=openbsd | os=netbsd | os=sunos | os=android)
+  languageName: node
+  linkType: hard
+
+"tar@npm:^6.1.11, tar@npm:^6.1.2":
+  version: 6.2.0
+  resolution: "tar@npm:6.2.0"
+  dependencies:
+    chownr: ^2.0.0
+    fs-minipass: ^2.0.0
+    minipass: ^5.0.0
+    minizlib: ^2.1.1
+    mkdirp: ^1.0.3
+    yallist: ^4.0.0
+  checksum: db4d9fe74a2082c3a5016630092c54c8375ff3b280186938cfd104f2e089c4fd9bad58688ef6be9cf186a889671bf355c7cda38f09bbf60604b281715ca57f5c
+  languageName: node
+  linkType: hard
+
+"topojson-client@npm:^3.1.0":
+  version: 3.1.0
+  resolution: "topojson-client@npm:3.1.0"
+  dependencies:
+    commander: 2
+  bin:
+    topo2geo: bin/topo2geo
+    topomerge: bin/topomerge
+    topoquantize: bin/topoquantize
+  checksum: 8c029a4f18324ace0b8b55dd90edbd40c9e3c6de18bafbb5da37ca20ebf20e26fbd4420891acb3c2c264e214185f7557871f5651a9eee517028663be98d836de
+  languageName: node
+  linkType: hard
+
+"tr46@npm:~0.0.3":
+  version: 0.0.3
+  resolution: "tr46@npm:0.0.3"
+  checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3
+  languageName: node
+  linkType: hard
+
+"tslib@npm:~2.6.2":
+  version: 2.6.2
+  resolution: "tslib@npm:2.6.2"
+  checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad
+  languageName: node
+  linkType: hard
+
+"typestyle@npm:^2.0.4":
+  version: 2.4.0
+  resolution: "typestyle@npm:2.4.0"
+  dependencies:
+    csstype: 3.0.10
+    free-style: 3.1.0
+  checksum: 8b4f02c24f67b594f98507b15a753dabd4db5eb0af007e1d310527c64030e11e9464b25b5a6bc65fb5eec9a4459a8336050121ecc29063ac87b8b47a6d698893
+  languageName: node
+  linkType: hard
+
+"unique-filename@npm:^3.0.0":
+  version: 3.0.0
+  resolution: "unique-filename@npm:3.0.0"
+  dependencies:
+    unique-slug: ^4.0.0
+  checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df
+  languageName: node
+  linkType: hard
+
+"unique-slug@npm:^4.0.0":
+  version: 4.0.0
+  resolution: "unique-slug@npm:4.0.0"
+  dependencies:
+    imurmurhash: ^0.1.4
+  checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15
+  languageName: node
+  linkType: hard
+
+"universalify@npm:^2.0.0":
+  version: 2.0.1
+  resolution: "universalify@npm:2.0.1"
+  checksum: ecd8469fe0db28e7de9e5289d32bd1b6ba8f7183db34f3bfc4ca53c49891c2d6aa05f3fb3936a81285a905cc509fb641a0c3fc131ec786167eff41236ae32e60
+  languageName: node
+  linkType: hard
+
+"uri-js@npm:^4.2.2":
+  version: 4.4.1
+  resolution: "uri-js@npm:4.4.1"
+  dependencies:
+    punycode: ^2.1.0
+  checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633
+  languageName: node
+  linkType: hard
+
+"url-parse@npm:~1.5.4":
+  version: 1.5.10
+  resolution: "url-parse@npm:1.5.10"
+  dependencies:
+    querystringify: ^2.1.1
+    requires-port: ^1.0.0
+  checksum: fbdba6b1d83336aca2216bbdc38ba658d9cfb8fc7f665eb8b17852de638ff7d1a162c198a8e4ed66001ddbf6c9888d41e4798912c62b4fd777a31657989f7bdf
+  languageName: node
+  linkType: hard
+
+"util-deprecate@npm:~1.0.1":
+  version: 1.0.2
+  resolution: "util-deprecate@npm:1.0.2"
+  checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2
+  languageName: node
+  linkType: hard
+
+"util@npm:^0.10.3":
+  version: 0.10.4
+  resolution: "util@npm:0.10.4"
+  dependencies:
+    inherits: 2.0.3
+  checksum: 913f9a90d05a60e91f91af01b8bd37e06bca4cc02d7b49e01089f9d5b78be2fffd61fb1a41b517de7238c5fc7337fa939c62d1fb4eb82e014894c7bee6637aaf
+  languageName: node
+  linkType: hard
+
+"validate.io-array@npm:^1.0.3":
+  version: 1.0.6
+  resolution: "validate.io-array@npm:1.0.6"
+  checksum: 54eca83ebc702e3e46499f9d9e77287a95ae25c4e727cd2fafee29c7333b3a36cca0c5d8f090b9406262786de80750fba85e7e7ef41e20bf8cc67d5570de449b
+  languageName: node
+  linkType: hard
+
+"validate.io-function@npm:^1.0.2":
+  version: 1.0.2
+  resolution: "validate.io-function@npm:1.0.2"
+  checksum: e4cce2479a20cb7c42e8630c777fb107059c27bc32925f769e3a73ca5fd62b4892d897b3c80227e14d5fcd1c5b7d05544e0579d63e59f14034c0052cda7f7c44
+  languageName: node
+  linkType: hard
+
+"validate.io-integer-array@npm:^1.0.0":
+  version: 1.0.0
+  resolution: "validate.io-integer-array@npm:1.0.0"
+  dependencies:
+    validate.io-array: ^1.0.3
+    validate.io-integer: ^1.0.4
+  checksum: 5f6d7fab8df7d2bf546a05e830201768464605539c75a2c2417b632b4411a00df84b462f81eac75e1be95303e7e0ac92f244c137424739f4e15cd21c2eb52c7f
+  languageName: node
+  linkType: hard
+
+"validate.io-integer@npm:^1.0.4":
+  version: 1.0.5
+  resolution: "validate.io-integer@npm:1.0.5"
+  dependencies:
+    validate.io-number: ^1.0.3
+  checksum: 88b3f8bb5a5277a95305d64abbfc437079220ce4f57a148cc6113e7ccec03dd86b10a69d413982602aa90a62b8d516148a78716f550dcd3aff863ac1c2a7a5e6
+  languageName: node
+  linkType: hard
+
+"validate.io-number@npm:^1.0.3":
+  version: 1.0.3
+  resolution: "validate.io-number@npm:1.0.3"
+  checksum: 42418aeb6c969efa745475154fe576809b02eccd0961aad0421b090d6e7a12d23a3e28b0d5dddd2c6347c1a6bdccb82bba5048c716131cd20207244d50e07282
+  languageName: node
+  linkType: hard
+
+"vega-canvas@npm:^1.2.6, vega-canvas@npm:^1.2.7":
+  version: 1.2.7
+  resolution: "vega-canvas@npm:1.2.7"
+  checksum: 6ff92fcdf0c359f2f662909c859a7f4cb4a502436136ab2f4c02373c47a621996ec0eea23e2108f11d62a618be301de86cd8528b5058c2e207a53ddd7ff58d1b
+  languageName: node
+  linkType: hard
+
+"vega-crossfilter@npm:~4.1.1":
+  version: 4.1.1
+  resolution: "vega-crossfilter@npm:4.1.1"
+  dependencies:
+    d3-array: ^3.2.2
+    vega-dataflow: ^5.7.5
+    vega-util: ^1.17.1
+  checksum: e399f7e92d7ba273ad5c1a9e29d362a9ec7feaeacb976eff3aa205b318382fb37a9fac3150ec1cb806364cd2b2cb54d5f23aea3285db684df2b4c27836422464
+  languageName: node
+  linkType: hard
+
+"vega-dataflow@npm:^5.7.3, vega-dataflow@npm:^5.7.5, vega-dataflow@npm:~5.7.5":
+  version: 5.7.5
+  resolution: "vega-dataflow@npm:5.7.5"
+  dependencies:
+    vega-format: ^1.1.1
+    vega-loader: ^4.5.1
+    vega-util: ^1.17.1
+  checksum: 917ed63e88b0871169a883f68da127a404d88e50c9ed6fa3f063a706016b064594fb804a2bf99f09bc4a899819cac320bdde12467edc861af1acc024552dd202
+  languageName: node
+  linkType: hard
+
+"vega-encode@npm:~4.9.2":
+  version: 4.9.2
+  resolution: "vega-encode@npm:4.9.2"
+  dependencies:
+    d3-array: ^3.2.2
+    d3-interpolate: ^3.0.1
+    vega-dataflow: ^5.7.5
+    vega-scale: ^7.3.0
+    vega-util: ^1.17.1
+  checksum: fcba123d2efb865b4f6cf8e9d64e0752ebae163dcfe61013f4874f7fe6fce3003ea9dd83b89db3ffab2a1530532a7c902dd24dfec226eb53d08dcf69189f308d
+  languageName: node
+  linkType: hard
+
+"vega-event-selector@npm:^3.0.1, vega-event-selector@npm:~3.0.1":
+  version: 3.0.1
+  resolution: "vega-event-selector@npm:3.0.1"
+  checksum: 66d09b5800a19a9b0c75f28811b140a1a2e70e84be6d6f87c568cdbce6e17c8e195f130f4e3de5d6dc737142d1f46f4fe7645177e154582cc8ba27c6845b54e8
+  languageName: node
+  linkType: hard
+
+"vega-expression@npm:^5.0.1, vega-expression@npm:^5.1.0, vega-expression@npm:~5.1.0":
+  version: 5.1.0
+  resolution: "vega-expression@npm:5.1.0"
+  dependencies:
+    "@types/estree": ^1.0.0
+    vega-util: ^1.17.1
+  checksum: 0355ebb6edd8f2ccc2dcf277a29b42b13f971725443212ce8a64cb8a02049f75f0add7ca9afcd3bc6744b93be791b526e7f983d9080d5052e9b0ca55bd488ae5
+  languageName: node
+  linkType: hard
+
+"vega-force@npm:~4.2.0":
+  version: 4.2.0
+  resolution: "vega-force@npm:4.2.0"
+  dependencies:
+    d3-force: ^3.0.0
+    vega-dataflow: ^5.7.5
+    vega-util: ^1.17.1
+  checksum: 8a371ca8d0892bc3e932cc279bbf54fe8b88e2b384c42f8df9877c801191953f3ee3e2f516f675a69ecb052ed081232dfb3438989620e8ad5c2a316ccee60277
+  languageName: node
+  linkType: hard
+
+"vega-format@npm:^1.1.1, vega-format@npm:~1.1.1":
+  version: 1.1.1
+  resolution: "vega-format@npm:1.1.1"
+  dependencies:
+    d3-array: ^3.2.2
+    d3-format: ^3.1.0
+    d3-time-format: ^4.1.0
+    vega-time: ^2.1.1
+    vega-util: ^1.17.1
+  checksum: d506acb8611a6340ff419ebf308a758a54aaf3cf141863553df83980dcf8dc7bf806bee257d11a52d43682d159d7be03ab8a92bdd4d018d8c9f39a70c45cb197
+  languageName: node
+  linkType: hard
+
+"vega-functions@npm:^5.13.1, vega-functions@npm:~5.13.2":
+  version: 5.13.2
+  resolution: "vega-functions@npm:5.13.2"
+  dependencies:
+    d3-array: ^3.2.2
+    d3-color: ^3.1.0
+    d3-geo: ^3.1.0
+    vega-dataflow: ^5.7.5
+    vega-expression: ^5.1.0
+    vega-scale: ^7.3.0
+    vega-scenegraph: ^4.10.2
+    vega-selections: ^5.4.1
+    vega-statistics: ^1.8.1
+    vega-time: ^2.1.1
+    vega-util: ^1.17.1
+  checksum: 178498cf93c3d9ef392fb57a5c7992dbb9118c546a6acb4cff9783f911fb30dbf50634cbfd6e3a9bc358c4aec9a571bd55f9cf3de551213cd386f152ac882986
+  languageName: node
+  linkType: hard
+
+"vega-geo@npm:~4.4.1":
+  version: 4.4.1
+  resolution: "vega-geo@npm:4.4.1"
+  dependencies:
+    d3-array: ^3.2.2
+    d3-color: ^3.1.0
+    d3-geo: ^3.1.0
+    vega-canvas: ^1.2.7
+    vega-dataflow: ^5.7.5
+    vega-projection: ^1.6.0
+    vega-statistics: ^1.8.1
+    vega-util: ^1.17.1
+  checksum: e9c62d9134c2449a1a80cd5cb71ed6dc455d893a36fdcb1a696bcae3897670c32687cf14a0f366b0ec76905e5be406131dc671e5d607ffcbef74e94b8c697007
+  languageName: node
+  linkType: hard
+
+"vega-hierarchy@npm:~4.1.1":
+  version: 4.1.1
+  resolution: "vega-hierarchy@npm:4.1.1"
+  dependencies:
+    d3-hierarchy: ^3.1.2
+    vega-dataflow: ^5.7.5
+    vega-util: ^1.17.1
+  checksum: beb23948922f1b52bf03b836d71d3a5a36db3a6bfe2af74b6a5fc45a2e2e877226313e2389772be62a459728467618175d8c02a07e88330844fdec45fd5f69ac
+  languageName: node
+  linkType: hard
+
+"vega-label@npm:~1.2.1":
+  version: 1.2.1
+  resolution: "vega-label@npm:1.2.1"
+  dependencies:
+    vega-canvas: ^1.2.6
+    vega-dataflow: ^5.7.3
+    vega-scenegraph: ^4.9.2
+    vega-util: ^1.15.2
+  checksum: 2704c99328ead677441e746acd8f4529301437d08b2758933fc13353d2eab9af353e4ebcc4ff1f09f41d600401b097e2df3c9e8e56d4861e5216222dd9e29185
+  languageName: node
+  linkType: hard
+
+"vega-lite@npm:^5.6.1":
+  version: 5.16.1
+  resolution: "vega-lite@npm:5.16.1"
+  dependencies:
+    json-stringify-pretty-compact: ~3.0.0
+    tslib: ~2.6.2
+    vega-event-selector: ~3.0.1
+    vega-expression: ~5.1.0
+    vega-util: ~1.17.2
+    yargs: ~17.7.2
+  peerDependencies:
+    vega: ^5.24.0
+  bin:
+    vl2pdf: bin/vl2pdf
+    vl2png: bin/vl2png
+    vl2svg: bin/vl2svg
+    vl2vg: bin/vl2vg
+  checksum: 4de40199b664700d9a8f0fa3571f5addc32e07c1ca12ef36c9238e23368abfa601ead7a27874249d6a31a7bea1cdf0a867d486dd6ff98e1d0ac4a910df418550
+  languageName: node
+  linkType: hard
+
+"vega-loader@npm:^4.5.1, vega-loader@npm:~4.5.1":
+  version: 4.5.1
+  resolution: "vega-loader@npm:4.5.1"
+  dependencies:
+    d3-dsv: ^3.0.1
+    node-fetch: ^2.6.7
+    topojson-client: ^3.1.0
+    vega-format: ^1.1.1
+    vega-util: ^1.17.1
+  checksum: 95f6eebc75a97665cf34faaea431934047e1b2e9d7532f48f62dab4884d606a7d9da53962e1631a5790a7a867f720581852a3db9be1a7f667882062f6c102ee0
+  languageName: node
+  linkType: hard
+
+"vega-parser@npm:~6.2.0":
+  version: 6.2.0
+  resolution: "vega-parser@npm:6.2.0"
+  dependencies:
+    vega-dataflow: ^5.7.5
+    vega-event-selector: ^3.0.1
+    vega-functions: ^5.13.1
+    vega-scale: ^7.3.0
+    vega-util: ^1.17.1
+  checksum: 19872153c16aab30c4df338e0df7bd331e0bf74c7c6afce5428df555b9bdb0c4acf76b54092cacd4726a1349912ea803c90e1b30d53f4a02044e0559873969a7
+  languageName: node
+  linkType: hard
+
+"vega-projection@npm:^1.6.0, vega-projection@npm:~1.6.0":
+  version: 1.6.0
+  resolution: "vega-projection@npm:1.6.0"
+  dependencies:
+    d3-geo: ^3.1.0
+    d3-geo-projection: ^4.0.0
+    vega-scale: ^7.3.0
+  checksum: 9c52848e294ff68051fe9f44fa536656c4e6be3d474bd3359e21aa154ab282755eaee624ac31b1ca01816227900e1d81a6d191e36f46e47525ed6648397f0fa0
+  languageName: node
+  linkType: hard
+
+"vega-regression@npm:~1.2.0":
+  version: 1.2.0
+  resolution: "vega-regression@npm:1.2.0"
+  dependencies:
+    d3-array: ^3.2.2
+    vega-dataflow: ^5.7.3
+    vega-statistics: ^1.9.0
+    vega-util: ^1.15.2
+  checksum: 5f79db18c7849b465550e00ca8fec9d896aa3cf6d6279daac8b862beb632d841dcb6a93136d6b827c37e3d1cbd2bb2f7dec58f96c572763870c2d38f2cc4e0b3
+  languageName: node
+  linkType: hard
+
+"vega-runtime@npm:^6.1.4, vega-runtime@npm:~6.1.4":
+  version: 6.1.4
+  resolution: "vega-runtime@npm:6.1.4"
+  dependencies:
+    vega-dataflow: ^5.7.5
+    vega-util: ^1.17.1
+  checksum: a1da40ddb3109f1ced8e61d2e7b52784fbb29936ee4c47cb5630dbbeb12ef6e0c3cd3cd189c34377f82402bf19c61dd148d90330fec743b8667635ac48e4ba29
+  languageName: node
+  linkType: hard
+
+"vega-scale@npm:^7.3.0, vega-scale@npm:~7.3.0":
+  version: 7.3.0
+  resolution: "vega-scale@npm:7.3.0"
+  dependencies:
+    d3-array: ^3.2.2
+    d3-interpolate: ^3.0.1
+    d3-scale: ^4.0.2
+    vega-time: ^2.1.1
+    vega-util: ^1.17.1
+  checksum: 8e434f27a51a913dd18374ec0d2bc33758eda7db1ee6342721644f977e705268b8df6b3e89813774d776d03a0cd24f91d4d59f9e80951f67dfbbf8637f5a69ad
+  languageName: node
+  linkType: hard
+
+"vega-scenegraph@npm:^4.10.2, vega-scenegraph@npm:^4.9.2, vega-scenegraph@npm:~4.10.2":
+  version: 4.10.2
+  resolution: "vega-scenegraph@npm:4.10.2"
+  dependencies:
+    d3-path: ^3.1.0
+    d3-shape: ^3.2.0
+    vega-canvas: ^1.2.7
+    vega-loader: ^4.5.1
+    vega-scale: ^7.3.0
+    vega-util: ^1.17.1
+  checksum: 6caf3e298297b918c8b6a72f019e51e2bfbaecd316e4d1c37d855ac9366d177cdbf16e9c8857c5ccde128bcd9645af7ee7dc81111bcd743d192e1a3b9a9d7185
+  languageName: node
+  linkType: hard
+
+"vega-selections@npm:^5.4.1":
+  version: 5.4.1
+  resolution: "vega-selections@npm:5.4.1"
+  dependencies:
+    d3-array: 3.2.2
+    vega-expression: ^5.0.1
+    vega-util: ^1.17.1
+  checksum: c594d41ec3886af94976e4dc4e152bea9b3975a22d435aa38dac2aab105851cb83fd4aa0f1e81a47f8bc0bea1677af93816331e3ed084ab3ec2e51b3544c109f
+  languageName: node
+  linkType: hard
+
+"vega-statistics@npm:^1.7.9, vega-statistics@npm:^1.8.1, vega-statistics@npm:^1.9.0, vega-statistics@npm:~1.9.0":
+  version: 1.9.0
+  resolution: "vega-statistics@npm:1.9.0"
+  dependencies:
+    d3-array: ^3.2.2
+  checksum: bbf2ea088c5a6a662c6aed1bf57996c06a82a98228730ada8a97e57824a6ed391999ea974f16dcde6e73bf88799976d91aff748842848d38ab45dbb9fafba3f9
+  languageName: node
+  linkType: hard
+
+"vega-time@npm:^2.1.1, vega-time@npm:~2.1.1":
+  version: 2.1.1
+  resolution: "vega-time@npm:2.1.1"
+  dependencies:
+    d3-array: ^3.2.2
+    d3-time: ^3.1.0
+    vega-util: ^1.17.1
+  checksum: 3d6a50f779be4b5e7f27bd2aae766035c29e59e03e62d2e96b94a2f759ed3104c1102c1006dd416e7b819ee501880ae7a722c2fa9aabf9efac86503c1aada14a
+  languageName: node
+  linkType: hard
+
+"vega-transforms@npm:~4.10.2":
+  version: 4.10.2
+  resolution: "vega-transforms@npm:4.10.2"
+  dependencies:
+    d3-array: ^3.2.2
+    vega-dataflow: ^5.7.5
+    vega-statistics: ^1.8.1
+    vega-time: ^2.1.1
+    vega-util: ^1.17.1
+  checksum: 2dbe4c767542a5dc4dbb453fd1317b00912e47dbdb3de637259b2552497dd8039c20c795318ad57341eb0d30b69712c55a2da16dc9ad2329a68c35fb75b4fee6
+  languageName: node
+  linkType: hard
+
+"vega-typings@npm:~0.24.0":
+  version: 0.24.2
+  resolution: "vega-typings@npm:0.24.2"
+  dependencies:
+    "@types/geojson": 7946.0.4
+    vega-event-selector: ^3.0.1
+    vega-expression: ^5.0.1
+    vega-util: ^1.17.1
+  checksum: 9c06430b2c8a5e6a8b29448333aa95b0946aa69c181933f52eb69f0e3594a0f308be7760f0febe13253a0b7414721841fce790b2b3812a7fb3b0a3f0391e6ace
+  languageName: node
+  linkType: hard
+
+"vega-util@npm:^1.15.2, vega-util@npm:^1.17.1, vega-util@npm:~1.17.2":
+  version: 1.17.2
+  resolution: "vega-util@npm:1.17.2"
+  checksum: 5d681cb1a6ffda7af1b74df7c1c46a32f1d874daef54f9c9c65c7d7c7bfc4271dc6d9b1c1c7a853b14eb6e4cc8ec811b0132cd3ea25fa85259eac92e1b4f07fa
+  languageName: node
+  linkType: hard
+
+"vega-view-transforms@npm:~4.5.9":
+  version: 4.5.9
+  resolution: "vega-view-transforms@npm:4.5.9"
+  dependencies:
+    vega-dataflow: ^5.7.5
+    vega-scenegraph: ^4.10.2
+    vega-util: ^1.17.1
+  checksum: aeeaf3c2f1a02b1303c16a586dbcb20f208c101d06d7e988e18ab71fb67d87be5d8ff228ebf25971535d6e41dc816168cfa68b8676e7250df07a40aefdea32a7
+  languageName: node
+  linkType: hard
+
+"vega-view@npm:~5.11.1":
+  version: 5.11.1
+  resolution: "vega-view@npm:5.11.1"
+  dependencies:
+    d3-array: ^3.2.2
+    d3-timer: ^3.0.1
+    vega-dataflow: ^5.7.5
+    vega-format: ^1.1.1
+    vega-functions: ^5.13.1
+    vega-runtime: ^6.1.4
+    vega-scenegraph: ^4.10.2
+    vega-util: ^1.17.1
+  checksum: 82ddc74593b3a359d0b3458bc06573673ff9bf13f84020cb36fb4676c5d7f547e9650eb6faaa76799fbcedd27bcd266603dbd08c420e2d2229cc6b9f48a4a66d
+  languageName: node
+  linkType: hard
+
+"vega-voronoi@npm:~4.2.1":
+  version: 4.2.1
+  resolution: "vega-voronoi@npm:4.2.1"
+  dependencies:
+    d3-delaunay: ^6.0.2
+    vega-dataflow: ^5.7.5
+    vega-util: ^1.17.1
+  checksum: f618174ad5f451c507a80e373288bb2c0da7a8a908d62f885bc77b354c4334504ae2d1042742f68ad419ade7b548aeca9ca1042ae5541bebd7f5297afc23bb35
+  languageName: node
+  linkType: hard
+
+"vega-wordcloud@npm:~4.1.4":
+  version: 4.1.4
+  resolution: "vega-wordcloud@npm:4.1.4"
+  dependencies:
+    vega-canvas: ^1.2.7
+    vega-dataflow: ^5.7.5
+    vega-scale: ^7.3.0
+    vega-statistics: ^1.8.1
+    vega-util: ^1.17.1
+  checksum: 34d1882651d3a2f34ce40a6eaeed700de126f627cdf041ec2bcc7ada46d7b4b68a38a2974236eec87ee876d9abd095af7ab17e7698b0e2fbc831460767969d7a
+  languageName: node
+  linkType: hard
+
+"vega@npm:^5.20.0":
+  version: 5.25.0
+  resolution: "vega@npm:5.25.0"
+  dependencies:
+    vega-crossfilter: ~4.1.1
+    vega-dataflow: ~5.7.5
+    vega-encode: ~4.9.2
+    vega-event-selector: ~3.0.1
+    vega-expression: ~5.1.0
+    vega-force: ~4.2.0
+    vega-format: ~1.1.1
+    vega-functions: ~5.13.2
+    vega-geo: ~4.4.1
+    vega-hierarchy: ~4.1.1
+    vega-label: ~1.2.1
+    vega-loader: ~4.5.1
+    vega-parser: ~6.2.0
+    vega-projection: ~1.6.0
+    vega-regression: ~1.2.0
+    vega-runtime: ~6.1.4
+    vega-scale: ~7.3.0
+    vega-scenegraph: ~4.10.2
+    vega-statistics: ~1.9.0
+    vega-time: ~2.1.1
+    vega-transforms: ~4.10.2
+    vega-typings: ~0.24.0
+    vega-util: ~1.17.2
+    vega-view: ~5.11.1
+    vega-view-transforms: ~4.5.9
+    vega-voronoi: ~4.2.1
+    vega-wordcloud: ~4.1.4
+  checksum: ddc7b1f2a70c72b842e111d32bdd8ff050992a50e385e8ddc6e35c02e7c481a652383c81c547b7ebfd31cda04ab9f9acf0a8cc47c6bd19b91765b254aac30d24
+  languageName: node
+  linkType: hard
+
+"vscode-jsonrpc@npm:8.2.0, vscode-jsonrpc@npm:^8.0.2":
+  version: 8.2.0
+  resolution: "vscode-jsonrpc@npm:8.2.0"
+  checksum: f302a01e59272adc1ae6494581fa31c15499f9278df76366e3b97b2236c7c53ebfc71efbace9041cfd2caa7f91675b9e56f2407871a1b3c7f760a2e2ee61484a
+  languageName: node
+  linkType: hard
+
+"vscode-jsonrpc@npm:^6.0.0":
+  version: 6.0.0
+  resolution: "vscode-jsonrpc@npm:6.0.0"
+  checksum: 3a67a56f287e8c449f2d9752eedf91e704dc7b9a326f47fb56ac07667631deb45ca52192e9bccb2ab108764e48409d70fa64b930d46fc3822f75270b111c5f53
+  languageName: node
+  linkType: hard
+
+"vscode-languageserver-protocol@npm:^3.17.0":
+  version: 3.17.5
+  resolution: "vscode-languageserver-protocol@npm:3.17.5"
+  dependencies:
+    vscode-jsonrpc: 8.2.0
+    vscode-languageserver-types: 3.17.5
+  checksum: dfb42d276df5dfea728267885b99872ecff62f6c20448b8539fae71bb196b420f5351c5aca7c1047bf8fb1f89fa94a961dce2bc5bf7e726198f4be0bb86a1e71
+  languageName: node
+  linkType: hard
+
+"vscode-languageserver-types@npm:3.17.5":
+  version: 3.17.5
+  resolution: "vscode-languageserver-types@npm:3.17.5"
+  checksum: 79b420e7576398d396579ca3a461c9ed70e78db4403cd28bbdf4d3ed2b66a2b4114031172e51fad49f0baa60a2180132d7cb2ea35aa3157d7af3c325528210ac
+  languageName: node
+  linkType: hard
+
+"vscode-ws-jsonrpc@npm:~1.0.2":
+  version: 1.0.2
+  resolution: "vscode-ws-jsonrpc@npm:1.0.2"
+  dependencies:
+    vscode-jsonrpc: ^8.0.2
+  checksum: eb2fdb5c96f124326505f06564dfc6584318b748fd6e39b4c0ba16a0d383d13ba0e9433596abdb841428dfc2a5501994c3206723d1cb38c6af5fcac1faf4be26
+  languageName: node
+  linkType: hard
+
+"w3c-keyname@npm:^2.2.4":
+  version: 2.2.8
+  resolution: "w3c-keyname@npm:2.2.8"
+  checksum: 95bafa4c04fa2f685a86ca1000069c1ec43ace1f8776c10f226a73296caeddd83f893db885c2c220ebeb6c52d424e3b54d7c0c1e963bbf204038ff1a944fbb07
+  languageName: node
+  linkType: hard
+
+"webidl-conversions@npm:^3.0.0":
+  version: 3.0.1
+  resolution: "webidl-conversions@npm:3.0.1"
+  checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c
+  languageName: node
+  linkType: hard
+
+"whatwg-url@npm:^5.0.0":
+  version: 5.0.0
+  resolution: "whatwg-url@npm:5.0.0"
+  dependencies:
+    tr46: ~0.0.3
+    webidl-conversions: ^3.0.0
+  checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c
+  languageName: node
+  linkType: hard
+
+"which@npm:^2.0.1":
+  version: 2.0.2
+  resolution: "which@npm:2.0.2"
+  dependencies:
+    isexe: ^2.0.0
+  bin:
+    node-which: ./bin/node-which
+  checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1
+  languageName: node
+  linkType: hard
+
+"which@npm:^4.0.0":
+  version: 4.0.0
+  resolution: "which@npm:4.0.0"
+  dependencies:
+    isexe: ^3.1.1
+  bin:
+    node-which: bin/which.js
+  checksum: f17e84c042592c21e23c8195108cff18c64050b9efb8459589116999ea9da6dd1509e6a1bac3aeebefd137be00fabbb61b5c2bc0aa0f8526f32b58ee2f545651
+  languageName: node
+  linkType: hard
+
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0":
+  version: 7.0.0
+  resolution: "wrap-ansi@npm:7.0.0"
+  dependencies:
+    ansi-styles: ^4.0.0
+    string-width: ^4.1.0
+    strip-ansi: ^6.0.0
+  checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b
+  languageName: node
+  linkType: hard
+
+"wrap-ansi@npm:^8.1.0":
+  version: 8.1.0
+  resolution: "wrap-ansi@npm:8.1.0"
+  dependencies:
+    ansi-styles: ^6.1.0
+    string-width: ^5.0.1
+    strip-ansi: ^7.0.1
+  checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238
+  languageName: node
+  linkType: hard
+
+"ws@npm:^8.11.0":
+  version: 8.14.2
+  resolution: "ws@npm:8.14.2"
+  peerDependencies:
+    bufferutil: ^4.0.1
+    utf-8-validate: ">=5.0.2"
+  peerDependenciesMeta:
+    bufferutil:
+      optional: true
+    utf-8-validate:
+      optional: true
+  checksum: 3ca0dad26e8cc6515ff392b622a1467430814c463b3368b0258e33696b1d4bed7510bc7030f7b72838b9fdeb8dbd8839cbf808367d6aae2e1d668ce741d4308b
+  languageName: node
+  linkType: hard
+
+"y-protocols@npm:^1.0.5":
+  version: 1.0.6
+  resolution: "y-protocols@npm:1.0.6"
+  dependencies:
+    lib0: ^0.2.85
+  peerDependencies:
+    yjs: ^13.0.0
+  checksum: 4b57c8811befcf2e45c3d47830005f8a33e626c734f78a42fe8a4fa3caad2233ba85a7c8bceefbd52ffc40130d3f3faee664fd0d1c324ff1fa8817a056ccdc1c
+  languageName: node
+  linkType: hard
+
+"y18n@npm:^5.0.5":
+  version: 5.0.8
+  resolution: "y18n@npm:5.0.8"
+  checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30
+  languageName: node
+  linkType: hard
+
+"yallist@npm:^4.0.0":
+  version: 4.0.0
+  resolution: "yallist@npm:4.0.0"
+  checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5
+  languageName: node
+  linkType: hard
+
+"yargs-parser@npm:^21.1.1":
+  version: 21.1.1
+  resolution: "yargs-parser@npm:21.1.1"
+  checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c
+  languageName: node
+  linkType: hard
+
+"yargs@npm:~17.7.2":
+  version: 17.7.2
+  resolution: "yargs@npm:17.7.2"
+  dependencies:
+    cliui: ^8.0.1
+    escalade: ^3.1.1
+    get-caller-file: ^2.0.5
+    require-directory: ^2.1.1
+    string-width: ^4.2.3
+    y18n: ^5.0.5
+    yargs-parser: ^21.1.1
+  checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a
+  languageName: node
+  linkType: hard
+
+"yjs@npm:^13.5.40":
+  version: 13.6.8
+  resolution: "yjs@npm:13.6.8"
+  dependencies:
+    lib0: ^0.2.74
+  checksum: a2a6fd17a2cce6461b64bedd69f66845b9dfd4702e285be0b5e382840337232e54ba5cf5d48f871263074de625d3902d17ab8a1766695af3fc05a0b4da8d95e0
+  languageName: node
+  linkType: hard