diff --git a/.dockerignore b/.dockerignore index 83edc646..f10e69d7 100644 --- a/.dockerignore +++ b/.dockerignore @@ -10,7 +10,7 @@ notebook.ipynb Dockerfile Dockerfile_base Dockerfile_dev -node_modules +webapp/node_modules webapp/build webapp/geppetto-client workspace @@ -23,4 +23,5 @@ app.log /.pytest_cache .jupyter-config **/*.pyc -**/__pycache__ \ No newline at end of file +**/__pycache__ +app.log \ No newline at end of file diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 00000000..61201c39 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,258 @@ +# name: Tests Workflow + +# # Controls when the workflow will run +# on: +# # Triggers the workflow on push or pull request events but only for the specified branch +# push: +# branches: +# - "master" +# - "development" +# pull_request: +# branches: +# - "master" +# - "development" + +# # A workflow run is made up of one or more jobs that can run sequentially or in parallel +# jobs: +# EEG_Dipole-test: +# # The type of runner that the job will run on +# runs-on: ubuntu-20.04 +# container: lironavon/docker-puppeteer-container:14.16.0 +# env: +# CI: true +# steps: +# - uses: actions/checkout@v1 +# - name: Use Node.js ${{ matrix.node-version }} +# uses: actions/setup-node@v1 +# with: +# node-version: ${{ matrix.node-version }} +# cache-dependency-path: frontend/e2e/tests/package-lock.json +# - name: EEG and Dipole Plot snapshot test using Tut#1 +# run: | +# cd tests/frontend/e2e +# #install dependencies +# npm ci +# # run EEG and Dipole Plot test +# npm run EEG_Dipole_test +# env: +# CI: true +# Experiment_Manager-test: +# # The type of runner that the job will run on +# runs-on: ubuntu-20.04 +# container: lironavon/docker-puppeteer-container:14.16.0 +# env: +# CI: true +# steps: +# - uses: actions/checkout@v1 +# - name: Use Node.js ${{ matrix.node-version }} +# uses: actions/setup-node@v1 +# with: +# node-version: ${{ matrix.node-version }} +# cache-dependency-path: frontend/e2e/tests/package-lock.json +# - name: Experiment Manager snapshot test using Tut#1 +# run: | +# cd tests/frontend/e2e +# #install dependencies +# npm ci +# # run Experiment Manager test +# npm run Experiment_Manager_test +# env: +# CI: true +# Control_Panel-test: +# # The type of runner that the job will run on +# runs-on: ubuntu-20.04 +# container: lironavon/docker-puppeteer-container:14.16.0 +# env: +# CI: true +# steps: +# - uses: actions/checkout@v1 +# - name: Use Node.js ${{ matrix.node-version }} +# uses: actions/setup-node@v1 +# with: +# node-version: ${{ matrix.node-version }} +# cache-dependency-path: frontend/e2e/tests/package-lock.json +# - name: Control Panel test using Tut#2 +# run: | +# cd tests/frontend/e2e +# #install dependencies +# npm ci +# # run Control Panel test +# npm run Control_Panel_test +# env: +# CI: true +# Save_and_Open_File-test: +# # The type of runner that the job will run on +# runs-on: ubuntu-20.04 +# container: lironavon/docker-puppeteer-container:14.16.0 +# env: +# CI: true +# steps: +# - uses: actions/checkout@v1 +# - name: Use Node.js ${{ matrix.node-version }} +# uses: actions/setup-node@v1 +# with: +# node-version: ${{ matrix.node-version }} +# cache-dependency-path: frontend/e2e/tests/package-lock.json +# - name: Test for Opening and Saving a file +# run: | +# cd tests/frontend/e2e +# #install dependencies +# npm ci +# # run Control Panel test +# npm run Save_Open_File_test +# env: +# CI: true +# RxD-test: +# # The type of runner that the job will run on +# runs-on: ubuntu-20.04 +# container: lironavon/docker-puppeteer-container:14.16.0 +# env: +# CI: true +# steps: +# - uses: actions/checkout@v1 +# - name: Use Node.js ${{ matrix.node-version }} +# uses: actions/setup-node@v1 +# with: +# node-version: ${{ matrix.node-version }} +# cache-dependency-path: frontend/e2e/tests/package-lock.json +# - name: Test for RxD plot +# run: | +# cd tests/frontend/e2e +# #install dependencies +# npm ci +# # run RxD Plot test +# npm run RxD_test +# env: +# CI: true +# Tutorial_1-SmokeTest: +# # The type of runner that the job will run on +# runs-on: ubuntu-20.04 +# container: lironavon/docker-puppeteer-container:14.16.0 +# env: +# CI: true +# steps: +# - uses: actions/checkout@v1 +# - name: Use Node.js ${{ matrix.node-version }} +# uses: actions/setup-node@v1 +# with: +# node-version: ${{ matrix.node-version }} +# cache-dependency-path: frontend/e2e/tests/package-lock.json +# - name: Tutorial 1 Plot Tests +# run: | +# cd tests/frontend/e2e +# #install dependencies +# npm ci +# # run Tutorial 1 Plot Tests +# npm run Tutorial_1_test +# env: +# CI: true +# Tutorial_2-SmokeTest: +# # The type of runner that the job will run on +# runs-on: ubuntu-20.04 +# container: lironavon/docker-puppeteer-container:14.16.0 +# env: +# CI: true +# steps: +# - uses: actions/checkout@v1 +# - name: Use Node.js ${{ matrix.node-version }} +# uses: actions/setup-node@v1 +# with: +# node-version: ${{ matrix.node-version }} +# cache-dependency-path: frontend/e2e/tests/package-lock.json +# - name: Tutorial 2 Plot Tests +# run: | +# cd tests/frontend/e2e +# #install dependencies +# npm ci +# # run Tutorial 2 Plot Tests +# npm run Tutorial_2_test +# env: +# CI: true +# Tutorial_3a-SmokeTest: +# # The type of runner that the job will run on +# runs-on: ubuntu-20.04 +# container: lironavon/docker-puppeteer-container:14.16.0 +# env: +# CI: true +# steps: +# - uses: actions/checkout@v1 +# - name: Use Node.js ${{ matrix.node-version }} +# uses: actions/setup-node@v1 +# with: +# node-version: ${{ matrix.node-version }} +# cache-dependency-path: frontend/e2e/tests/package-lock.json +# - name: Tutorial 3a Plot Tests +# run: | +# cd tests/frontend/e2e +# #install dependencies +# npm ci +# # run Tutorial 3a Plot Tests +# npm run Tutorial_3A_test +# env: +# CI: true +# Tutorial_3b-SmokeTest: +# # The type of runner that the job will run on +# runs-on: ubuntu-20.04 +# container: lironavon/docker-puppeteer-container:14.16.0 +# env: +# CI: true +# steps: +# - uses: actions/checkout@v1 +# - name: Use Node.js ${{ matrix.node-version }} +# uses: actions/setup-node@v1 +# with: +# node-version: ${{ matrix.node-version }} +# cache-dependency-path: frontend/e2e/tests/package-lock.json +# - name: Tutorial 3b Plot Tests +# run: | +# cd tests/frontend/e2e +# #install dependencies +# npm ci +# # run Tutorial 3b Plot Tests +# npm run Tutorial_3B_test +# env: +# CI: true +# Tutorial_3c-SmokeTest: +# # The type of runner that the job will run on +# runs-on: ubuntu-20.04 +# container: lironavon/docker-puppeteer-container:14.16.0 +# env: +# CI: true +# steps: +# - uses: actions/checkout@v1 +# - name: Use Node.js ${{ matrix.node-version }} +# uses: actions/setup-node@v1 +# with: +# node-version: ${{ matrix.node-version }} +# cache-dependency-path: frontend/e2e/tests/package-lock.json +# - name: Tutorial 3c Plot Tests +# run: | +# cd tests/frontend/e2e +# #install dependencies +# npm ci +# # run Tutorial 3c Plot Tests +# npm run Tutorial_3C_test +# env: +# CI: true +# Tutorial_4-SmokeTest: +# # The type of runner that the job will run on +# runs-on: ubuntu-20.04 +# container: lironavon/docker-puppeteer-container:14.16.0 +# env: +# CI: true +# steps: +# - uses: actions/checkout@v1 +# - name: Use Node.js ${{ matrix.node-version }} +# uses: actions/setup-node@v1 +# with: +# node-version: ${{ matrix.node-version }} +# cache-dependency-path: frontend/e2e/tests/package-lock.json +# - name: Tutorial 4 Plot Tests +# run: | +# cd tests/frontend/e2e +# #install dependencies +# npm ci +# # run Tutorial 4 Plot Tests +# npm run Tutorial_4_test +# env: +# CI: true \ No newline at end of file diff --git a/.gitignore b/.gitignore index 8e8498bb..6a73d2c5 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ init.py webapp/node_modules webapp/geppetto-client webapp/build +webapp/.yalc workspace netpyne_workspace tests/frontend/e2e/node_modules @@ -24,4 +25,10 @@ utilities/x86_64 .idea *.iml x86_64 -.jupyter-config \ No newline at end of file +.jupyter-config +venv +webapp/build +webapp/.yalc +node_modules +sa_nyhead.mat +workspace \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 11bf9ff5..f4062502 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,33 +1,101 @@ -FROM frodriguez4600/jupyter-neuron:v7.8.0 -ARG INSTALLATION_FOLDER=/home/jovyan/work/NetPyNE-UI -ARG NETPYNE_VERSION=development -ARG WORKSPACE_VERSION=nov2020 -ARG JUPYTER_GEPPETTO_VERSION=development -ARG PYGEPPETTO_VERSION=development +FROM node:18 as jsbuild + +ENV FOLDER=netpyne + +WORKDIR $FOLDER/webapp +COPY webapp/package.json . +COPY webapp/yarn.lock . + +RUN yarn install --network-timeout 1000000000 + +COPY webapp . +RUN yarn build-dev + +### Download on a separate stage to run in parallel with buildkit +FROM jupyter/base-notebook:hub-1.5.0 as downloads +USER root +RUN wget --no-check-certificate -O /nyhead.mat https://www.parralab.org/nyhead/sa_nyhead.mat + +### +FROM jupyter/base-notebook:hub-1.5.0 +ENV NB_UID=jovyan +ENV FOLDER=netpyne +ENV NP_LFPYKIT_HEAD_FILE=/home/jovyan/nyhead.mat + +USER root + +RUN rm -rf /var/lib/apt/lists +RUN apt-get update -qq &&\ + apt-get install python3-tk vim nano unzip git make libtool g++ -qq pkg-config libfreetype6-dev libpng-dev libopenmpi-dev -y +RUN apt-get install openjdk-11-jre-headless -y +RUN conda install python=3.7 -y + + +WORKDIR $FOLDER +COPY --chown=1000:1000 requirements.txt requirements.txt +RUN --mount=type=cache,target=/root/.cache python -m pip install --upgrade pip &&\ + pip install -r requirements.txt --prefer-binary + + +# ToDo: fixme, for now remove the jupyter hub config json file because it overrides the default +# and thus removes the frame ancestor cors settings +RUN rm -f ~/.jupyter/*.json +RUN chown $NB_UID . +RUN chown $NB_UID /opt +RUN rm -Rf workspace +# sym link workspace pvc to $FOLDER +RUN mkdir -p /opt/workspace +RUN mkdir -p /opt/user + +COPY netpyne_ui netpyne_ui +COPY utilities utilities +COPY setup.py . +COPY tests tests +COPY NetPyNE-UI . +COPY README.rst . +COPY requirements-test.txt . + + +USER $NB_UID + + + + +ENV NEURON_HOME=/opt/conda + + +USER root + +RUN jupyter nbextension install --py --symlink --sys-prefix jupyter_geppetto +RUN jupyter nbextension enable --py --sys-prefix jupyter_geppetto +RUN jupyter nbextension enable --py --sys-prefix widgetsnbextension +RUN jupyter serverextension enable --py --sys-prefix jupyter_geppetto + ARG BUILD_ARGS="" +ARG WORKSPACE_VERSION=master + +RUN --mount=type=cache,target=/root/.cache python -m pip install --upgrade pip &&\ + python utilities/install.py ${BUILD_ARGS} --workspace $WORKSPACE_VERSION --npm-skip + + +RUN mv workspace /opt/workspace/tutorials +RUN chown -R $NB_UID /opt/workspace +RUN ln -s /opt/workspace workspace + +RUN jupyter labextension disable @jupyterlab/hub-extension -USER $NB_USER +COPY --from=downloads --chown=1000:1000 /nyhead.mat $NP_LFPYKIT_HEAD_FILE +COPY --from=jsbuild --chown=1000:1000 $FOLDER/webapp/build webapp/build -ENV INSTALLATION_FOLDER=$INSTALLATION_FOLDER -ENV NETPYNE_VERSION=$NETPYNE_VERSION -ENV WORKSPACE_VERSION=$WORKSPACE_VERSION -ENV JUPYTER_GEPPETTO_VERSION=$JUPYTER_GEPPETTO_VERSION -ENV PYGEPPETTO_VERSION=$PYGEPPETTO_VERSION -ENV BUILD_ARGS=$BUILD_ARGS +RUN chown -R $NB_UID /home/jovyan/.jupyter +RUN touch app.log && chown $NB_UID app.log +USER $NB_UID -WORKDIR /home/jovyan/work -COPY --chown=1000:1000 requirements.txt ${INSTALLATION_FOLDER}/requirements.txt -WORKDIR ${INSTALLATION_FOLDER} -RUN pip install -r requirements.txt +EXPOSE 8888 -COPY --chown=1000:1000 . . -WORKDIR ${INSTALLATION_FOLDER}/utilities +ENTRYPOINT ["tini", "-g", "--"] -RUN python install.py ${BUILD_ARGS} -WORKDIR ${INSTALLATION_FOLDER} -RUN pip install -r requirements-test.txt -RUN pytest tests/backend -CMD /bin/bash -c "jupyter notebook --NotebookApp.default_url=/geppetto --NotebookApp.token='' --library=netpyne_ui --NotebookApp.disable_check_xsrf=True" \ No newline at end of file +CMD ./NetPyNE-UI diff --git a/NetPyNE-UI b/NetPyNE-UI index abfedaeb..c7a58998 100755 --- a/NetPyNE-UI +++ b/NetPyNE-UI @@ -1,4 +1,4 @@ #!/bin/sh CONFIG=$(pwd)/.jupyter-config export JUPYTER_CONFIG_DIR=$CONFIG -exec jupyter notebook --NotebookApp.default_url=/geppetto --NotebookApp.token='' --library=netpyne_ui --NotebookApp.disable_check_xsrf=True +exec jupyter notebook --NotebookApp.default_url=/geppetto --NotebookApp.token='' --NotebookApp.notebook_dir=workspace --library=netpyne_ui --NotebookApp.disable_check_xsrf=True diff --git a/README.md b/README.md index 82a06054..3c2cc245 100644 --- a/README.md +++ b/README.md @@ -7,13 +7,18 @@ ![Screenshot](https://github.com/MetaCell/NetPyNE-UI/raw/documentation/docs/netpyneui.png) -This repository hosts the User Interface for [NetPyNE](http://www.neurosimlab.org/netpyne/). NetPyNE is a python package to facilitate the development, parallel simulation and analysis of biological neuronal networks using the NEURON simulator. +This repository hosts the User Interface for [NetPyNE](https://netpyne.v2.opensourcebrain.org/). NetPyNE is a python package +to facilitate the development, parallel simulation and analysis of biological neuronal networks using the NEURON +simulator. ## Install NetPyNE User Interface -Select one option to install the NetPyNE User Interface. +Select one option to install the NetPyNE User Interface. -If you are familiar with NEURON and have already NEURON installed in your machine you can proceed using Pip. If you want a container which comes with everything preinstalled including NEURON you can use the Docker image. Using docker you will still be able to mount a local folder which will be your NetPyNE workspace. If you don't have docker installed in your system and you have had troubles installing it you can opt for the Virtual Machine installation. +If you are familiar with NEURON and have already NEURON installed in your machine you can proceed using Pip. If you want +a container which comes with everything preinstalled including NEURON you can use the Docker image. Using docker you +will still be able to mount a local folder which will be your NetPyNE workspace. If you don't have docker installed in +your system and you have had troubles installing it you can opt for the Virtual Machine installation.

Pip @@ -25,26 +30,59 @@ If you are familiar with NEURON and have already NEURON installed in your machin ### Python Dependencies -We recommend the use of a new python 3 virtual environment: +We recommend the use of a new python 3.7 virtual environment. +Currently, NetPyNE-UI only supports Python 3.7, but that can change in the future. + +For NetPyNE-UI, the preferred way of creating a virtual env is to pass by conda/miniconda or mamba/micromamba. +The pyenv tool can be also used, but it requires to be compiled with some special options to have NEURON running properly the simulation using `nrniv`. +The reason behind this is that NEURON is distributed as a Python wheel with a specific option which force NEURON to look for the CPython dynamic lib. +However, pyenv by default installs the static version of the CPython lib, resulting in `nrniv -python` not being able to run. + +The way of creating the virtualenv using (mini)conda is the following + +```bash +conda create -n netpyne python=3.7 +conda activate netpyne +``` + +Here is how to create the virtualenv using (micro)mamba + +```bash +mamba create -n netpyne python=3.7 -c conda-forge +mamba activate netpyne +``` + +You can also directly create a virtualenv using your `python3` executable, obviously if it's the 3.7 version. ```bash python3 -m venv npenv source npenv/bin/activate ``` -Or, with conda +If you want to use anyway pyenv, here is how to properly create the virtualenv and activate it. ```bash -conda create -n netpyne python=3.7 -conda activate netpyne +env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install --verbose 3.7.17 +pyenv virtualenv 3.7.17 netpyne +pyenv shell netpyne ``` ### Run install script +When you are in your virtualenv, here is how you can install the "basic" version of NetPyNE-UI: + ```bash python utilities/install.py ``` +If you want to have a different version of NetPyNE or geppetto meta, you can pass the version you want to the installer: + +```bash +python utilities/install.py --dev --netpyne development --geppetto development --no-test +``` + +This command will install the `development` version of netpyne and geppetto and disable the tests during the installation. + ### Start application ```bash @@ -57,6 +95,14 @@ For debugging you can use `run.py` instead python run.py ``` +To run the UI in dev mode, you need to run `python run.py` in one terminal, and use `yarn` from the `webapp` folder, using node v14 (use `nvm` if you need to have a different version of node than the one installed on your system): + +```bash +cd webapp +yarn start +``` + +You can then navigate to `http://127.0.0.1:8081/` to access the dev version of the UI. ## Run NetPyNE User Interface in Docker @@ -65,19 +111,19 @@ Ensure that you have Docker installed on your system. Build the image ```bash -docker build -t netpyne-ui +docker build -t netpyne-ui . ``` Run the image ```bash -docker run -p 8888:8888 netpyne-ui +docker run -p 8888:8888 netpyne-ui ``` ## End-to-end tests -End-to-end tests are located in `tests/deployment/frontend/e2e`. -Ensure that the application is running in a blank state, since end-to-end tests interact with the running application. +End-to-end tests are located in `tests/deployment/frontend/e2e`. Ensure that the application is running in a blank +state, since end-to-end tests interact with the running application. Install packages @@ -92,11 +138,9 @@ Start tests npm run test ``` - #### Containerized tests -You can also use `docker-compose` to run the tests. -Ensure that you have Docker installed on your system. +You can also use `docker-compose` to run the tests. Ensure that you have Docker installed on your system. Build the images @@ -111,8 +155,7 @@ Run the tests docker-compose up --abort-on-container-exit --exit-code-from netpyne-ui-e2e ``` - ## Additional Notes -NetPyNE-UI is being developed in collaboration with the [Neurosim Lab](http://neurosimlab.org/). -See the [Wiki](https://github.com/MetaCell/NetPyNE-UI/wiki) for more info! \ No newline at end of file +NetPyNE-UI is being developed in collaboration with the [Neurosim Lab](http://neurosimlab.org/). See +the [Wiki](https://github.com/MetaCell/NetPyNE-UI/wiki) for more info! diff --git a/example.db b/example.db new file mode 100644 index 00000000..173a80be Binary files /dev/null and b/example.db differ diff --git a/jupyter_hub/Dockerfile_spawner b/jupyter_hub/Dockerfile_spawner index 6c919e57..6a1b503a 100644 --- a/jupyter_hub/Dockerfile_spawner +++ b/jupyter_hub/Dockerfile_spawner @@ -16,15 +16,15 @@ RUN /bin/bash -c "INCUBATOR_VER=${INCUBATOR_VER} source activate snakes && pip i # Clone NetPyNE-UI and install the development version RUN wget https://github.com/MetaCell/NetPyNE-UI/archive/$netpyneuiBranch.zip -q RUN unzip $netpyneuiBranch.zip -WORKDIR /home/jovyan/work/NetPyNE-UI-$netpyneuiBranch/utilities +WORKDIR /opt/workspace-$netpyneuiBranch/utilities RUN /bin/bash -c "source activate snakes && python --version" RUN /bin/bash -c "source activate snakes && exec python install.py branch $netpyneuiBranch" WORKDIR /home/jovyan RUN git clone https://github.com/Neurosim-lab/netpyne_workspace WORKDIR /home/jovyan/workspace -RUN ln -sfn /home/jovyan/work/NetPyNE-UI-$netpyneuiBranch/netpyne_ui/tests tests +RUN ln -sfn /opt/workspace-$netpyneuiBranch/netpyne_ui/tests tests # Copy jupyterhub_config -# RUN cp /home/jovyan/work/NetPyNE-UI-$netpyneuiBranch/jupyterhub_config.py . +# RUN cp /opt/workspace-$netpyneuiBranch/jupyterhub_config.py . CMD /bin/bash -c "source activate snakes && exec jupyterhub-singleuser --debug --NotebookApp.default_url=/geppetto --NotebookApp.token='' --library=netpyne_ui" diff --git a/k8s/cf_values.yaml b/k8s/cf_values.yaml index 6b4cfb84..606d014a 100644 --- a/k8s/cf_values.yaml +++ b/k8s/cf_values.yaml @@ -2,35 +2,19 @@ hub: image: name: gcr.io/metacellllc/netpyne-hub pullPolicy: IfNotPresent - + allowNamedServers: true resources: requests: cpu: 100m memory: 128Mi - - allowNamedServers: true namedServerLimitPerUser: 2 shutdownOnLogout: true - extraConfig: timing: | - c.JupyterHub.allow_named_servers = True - c.Spawner.port = 8000 - c.Spawner.http_timeout = 300 - c.Spawner.start_timeout = 300 - c.Spawner.notebook_dir = '/home/jovyan/work/NetPyNE-UI' + c.Spawner.notebook_dir = '/opt/workspace' c.Spawner.default_url = '/geppetto' - c.Spawner.debug = True spawner: >- - c.Spawner.args = ["--library=netpyne_ui", "--NotebookApp.disable_check_xsrf=True"] - -scheduling: - userScheduler: - replicas: 1 - -auth: - type: tmp - + c.Spawner.args = ["--library=netpyne_ui", "--NotebookApp.default_url=/geppetto"] singleuser: storage: type: none @@ -54,4 +38,4 @@ cull: maxAge: 0 debug: - enabled: false \ No newline at end of file + enabled: false diff --git a/k8s/minikube_values.yaml b/k8s/minikube_values.yaml index 79d1b855..a70ed44d 100644 --- a/k8s/minikube_values.yaml +++ b/k8s/minikube_values.yaml @@ -20,7 +20,7 @@ hub: c.Spawner.port = 8000 c.Spawner.http_timeout = 300 c.Spawner.start_timeout = 300 - c.Spawner.notebook_dir = '/home/jovyan/work/NetPyNE-UI' + c.Spawner.notebook_dir = '/opt/workspace' c.Spawner.default_url = '/geppetto' c.Spawner.debug = True c.Spawner.disable_check_xsrf=True diff --git a/netpyne_ui/__init__.py b/netpyne_ui/__init__.py index cb0bf72e..1b003722 100644 --- a/netpyne_ui/__init__.py +++ b/netpyne_ui/__init__.py @@ -1,6 +1,34 @@ import logging -from jupyter_geppetto.webapi import RouteManager +import sys +import os +from jupyter_geppetto.webapi import RouteManager from netpyne_ui import api +from netpyne_ui.constants import HERE +import sentry_sdk + +sentry_sdk.init( + "https://d8bf7e40eec34cb9891f6dd8207b5e83@sentry.metacell.us/6" +) + +HEAD_MODEL_FILE = os.getenv("NP_LFPYKIT_HEAD_FILE", "sa_nyhead.mat") + +def init_eeg(): + import sys + from netpyne_ui.constants import HERE + # FIXES library asking for input to download + sys.stdin = open(os.path.join(HERE, "resources/stdin.txt"),'r') + from lfpykit.eegmegcalc import NYHeadModel + try: + NYHeadModel(HEAD_MODEL_FILE) # Downloads the model if does not exist + except: + logging.error("Error initializing the EEG head model", exc_info=True) + +if not os.path.exists(HEAD_MODEL_FILE): + from multiprocessing import Process + thread = Process(target = init_eeg) + thread.start() + +RouteManager.add_controller(api.NetPyNEController) + -RouteManager.add_controller(api.NetPyNEController) \ No newline at end of file diff --git a/netpyne_ui/api.py b/netpyne_ui/api.py index 91cac361..75580c53 100644 --- a/netpyne_ui/api.py +++ b/netpyne_ui/api.py @@ -8,7 +8,8 @@ from tempfile import TemporaryDirectory from jupyter_geppetto.webapi import get, post from notebook.base.handlers import IPythonHandler -from netpyne_ui.constants import NETPYNE_WORKDIR, UPLOAD_FOLDER_NAME, ALLOWED_EXTENSIONS, UPLOAD_FOLDER_PATH +from netpyne_ui.constants import ALLOWED_EXTENSIONS, UPLOAD_FOLDER_PATH + def allowed_file(filename, allowed_extensions=ALLOWED_EXTENSIONS): return '.' in filename and \ @@ -18,7 +19,8 @@ def allowed_file(filename, allowed_extensions=ALLOWED_EXTENSIONS): def send_files(handler, file_path, filename): with open(file_path, "rb") as f: handler.set_header('Content-Type', 'application/force-download') - handler.set_header('Content-Disposition', f"attachment; filename={filename}") + handler.set_header('Content-Disposition', + f"attachment; filename={filename}") try: while True: @@ -26,7 +28,7 @@ def send_files(handler, file_path, filename): if _buffer: handler.write(_buffer) else: - return + return except: handler.set_status(500, f"Error sending files") @@ -35,36 +37,57 @@ def get_file_paths(handler): file_paths = False if 'uri' in handler.request.arguments: file_paths = [] - tmp_file_paths = [path.decode('utf-8') for path in handler.request.arguments['uri']] + tmp_file_paths = [path.decode('utf-8') + for path in handler.request.arguments['uri']] for path in tmp_file_paths: if os.path.exists(path): file_paths.append(path) - + return file_paths + +def is_within_directory(directory, target): + abs_directory = os.path.abspath(directory) + abs_target = os.path.abspath(target) + + prefix = os.path.commonprefix([abs_directory, abs_target]) + + return prefix == abs_directory + + +def safe_extract_tar(tar, path=".", members=None, *, numeric_owner=False): + for member in tar.getmembers(): + member_path = os.path.join(path, member.name) + if not is_within_directory(path, member_path): + raise Exception("Attempted Path Traversal in Tar File") + tar.extractall(path, members, numeric_owner=numeric_owner) + + class NetPyNEController: # pytest: no cover @post('/uploads') def uploads(handler: IPythonHandler): files = handler.request.files files_saved = 0 - + if len(files) == 0 or 'file' not in files: - handler.set_status(400, f"Can't find 'file' or filename is empty. Files received {len(files)}") + handler.set_status( + 400, f"Can't find 'file' or filename is empty. Files received {len(files)}") else: for f in files['file']: if not allowed_file(f.filename): - logging.warn(f"Can't store file {f.filename}. Extension not allowed") + logging.warn( + f"Can't store file {f.filename}. Extension not allowed") continue - ## Save to file + # Save to file filename = f.filename file_path = os.path.join(UPLOAD_FOLDER_PATH, filename) - + with open(file_path, 'wb') as zf: zf.write(f['body']) - + files_saved += 1 if filename.endswith('.zip'): @@ -73,23 +96,20 @@ def uploads(handler: IPythonHandler): elif filename.endswith('.tar.gz'): with tarfile.open(file_path, mode='r:gz') as tar: - tar.extractall(UPLOAD_FOLDER_PATH) + safe_extract_tar(tar, UPLOAD_FOLDER_PATH) elif filename.endswith('.gz'): with gzip.open(file_path, "rb") as gz, open(file_path.replace('.gz', ''), 'wb') as ff: shutil.copyfileobj(gz, ff) - + handler.set_status(200, f"Number of files saved: {files_saved}. Number of files sent: {len(files['file'])}") handler.finish() - + @get('/downloads') def downloads(handler: IPythonHandler): - file_paths = get_file_paths(handler) - if file_paths: - if len(file_paths) == 0: handler.set_status(400, f"Files not found.") handler.finish() @@ -97,15 +117,49 @@ def downloads(handler: IPythonHandler): if len(file_paths) == 1: send_files(handler, file_paths[0], file_paths[0].split('/')[-1]) - - else : + + else: with TemporaryDirectory() as dir_path: tar_gz_file_name = f'{str(uuid.uuid4())}.tar.gz' tar_gz_file_path = os.path.join(dir_path, tar_gz_file_name) with tarfile.open(tar_gz_file_path, mode='w:gz') as tar: for file_path in file_paths: - tar.add(file_path, os.path.join('download', file_path.split('/')[-1])) + tar.add(file_path, os.path.join( + 'download', file_path.split('/')[-1])) send_files(handler, tar_gz_file_path, tar_gz_file_name) - + handler.finish() + + +def create_notebook(filename): + import nbformat as nbf + from nbformat.v4.nbbase import new_notebook + from nbformat import sign + import codecs + + directory = os.path.dirname(filename) + if not os.path.exists(directory): + os.makedirs(directory) + nb0 = new_notebook(cells=[nbf.v4.new_markdown_cell("""# Welcome to the NetPyNE-ui! + + """), + nbf.v4.new_code_cell( + 'netpyne_geppetto.netParams'), + nbf.v4.new_code_cell( + 'netpyne_geppetto.simConfig') + ], metadata={"kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }}) + + f = codecs.open(filename, encoding='utf-8', mode='w') + + nbf.write(nb0, filename) + f.close() + + +# TODO move to jupyter geppetto, using notebook dir path +if os.path.exists('workspace') and not os.path.exists('workspace/notebook.ipynb'): + create_notebook('workspace/notebook.ipynb') diff --git a/netpyne_ui/constants.py b/netpyne_ui/constants.py index 283d781c..96fe3ee6 100644 --- a/netpyne_ui/constants.py +++ b/netpyne_ui/constants.py @@ -2,12 +2,21 @@ UPLOAD_FOLDER_NAME = 'uploads' NETPYNE_WORKDIR = 'workspace' +EXPERIMENTS_FOLDER = "experiments" +MODEL_OUTPUT_FILENAME = 'model_output' -ALLOWED_EXTENSIONS = ["py", "zip", "gz", ".tar.gz", "pdf", "txt", "xls", "png", "jpeg", "hoc"] +SIMULATION_SCRIPT_NAME = "init.py" +TEMPLATE_FILENAME_SINGLE_RUN = "run.py" +TEMPLATE_FILENAME_SINGLE_RUN_INSTANTIATED = "run_instantiated_net.py" +TEMPLATE_FILENAME_BATCH_RUN = "batch_run_single.py" +TEMPLATE_FILENAME_BATCH = "batch.py" + +ALLOWED_EXTENSIONS = ["py", "zip", "gz", ".tar.gz", "pdf", "txt", "xls", "png", "jpeg", "hoc", "json", "xml", "nml"] HERE = os.path.dirname(os.path.abspath(__file__)) ROOT = os.path.dirname(HERE) UPLOAD_FOLDER_PATH = os.path.join(ROOT, NETPYNE_WORKDIR, UPLOAD_FOLDER_NAME) NETPYNE_WORKDIR_PATH = os.path.join(ROOT, NETPYNE_WORKDIR) +EXPERIMENTS_FOLDER_PATH = os.path.join(ROOT, NETPYNE_WORKDIR, EXPERIMENTS_FOLDER) if not os.path.exists(NETPYNE_WORKDIR_PATH): NETPYNE_WORKDIR_PATH = os.path.join(os.getcwd(), NETPYNE_WORKDIR) diff --git a/netpyne_ui/experiments.py b/netpyne_ui/experiments.py new file mode 100644 index 00000000..2838fa56 --- /dev/null +++ b/netpyne_ui/experiments.py @@ -0,0 +1,350 @@ +import copy +import dataclasses +import datetime +import json +import logging +import shutil +import pathlib +import os + +import numpy as np +from typing import List +from dacite import from_dict +from netpyne.batch import Batch + +from netpyne_ui import utils +from netpyne_ui import constants +from netpyne_ui import model + +SIM_CONFIG_FILE = "simConfig.json" +NET_PARAMS_FILE = "netParams.json" +EXPERIMENT_FILE = "experiment.json" + +# Id for the base model trial created for an Experiment without parameters. +BASE_TRIAL_ID = "model_output" + + +class ExperimentsError(Exception): + """ Base Exception for any specific Experiment errors. """ + pass + + +def get_experiments() -> List[dict]: + """Returns the current list of experiments. + + Scans the experiments folder to read experiments from disk and includes experiment in design. + """ + # Only update Experiments stored on filesystem + stored_experiments = _scan_experiments_directory() + model.experiments = [ + e for e in model.experiments if e.state in model.ExperimentState.DESIGN + ] + model.experiments.extend(stored_experiments) + + return [dataclasses.asdict(e) for e in model.experiments] + + +def add_experiment(experiment: dict): + exp = from_dict(model.Experiment, experiment) + exp.trials = _create_trials(exp) + + if exp.state == model.ExperimentState.DESIGN: + # Only one exp in design can exist + [model.experiments.remove(e) for e in get_by_states(model.ExperimentState.DESIGN)] + + _add_experiment(exp) + + +def get_experiment(name: str) -> dict: + exp = _get_by_name(name) + return dataclasses.asdict(exp) if exp else None + + +def remove_experiment(name: str): + experiment = _get_by_name(name) + if experiment: + _delete_experiment_folder(experiment) + model.experiments.remove(experiment) + + +def edit_experiment(name: str, experiment: dict): + exp = _get_by_name(name) + if not exp: + raise ExperimentsError(f"Experiment with name {name} does not exist") + + if exp.state != model.ExperimentState.DESIGN: + raise ExperimentsError( + f"Can only edit experiment in {model.ExperimentState.DESIGN} state" + ) + + updated_exp = from_dict(model.Experiment, experiment) + updated_exp.trials = _create_trials(updated_exp) + model.experiments.remove(exp) + _add_experiment(updated_exp) + + +def replace_current_with(name: str): + """Replaces the experiment in design with a new experiment based on experiment with `name`. + + :param name: name of experiment to be cloned. + :raises ExperimentsError: thrown if Experiment with `name` doesn't exist. + """ + exp = _get_by_name(name) + if not exp: + raise ExperimentsError(f"Experiment with name {name} does not exist") + + next_name = utils.get_next_file_name(constants.EXPERIMENTS_FOLDER_PATH, name) + new_exp = model.Experiment( + name=next_name, + state=model.ExperimentState.DESIGN, + params=exp.params, + seed=exp.seed, + initConfig=exp.initConfig, + method=exp.method, + ) + + current = get_current() + if current: + remove_experiment(current.name) + + new_exp.trials = _create_trials(new_exp) + _add_experiment(new_exp) + return + + +def get_current() -> model.Experiment: + return next( + (exp for exp in model.experiments if exp.state == model.ExperimentState.DESIGN), + None, + ) + + +def get_by_states(states: List[model.ExperimentState]) -> List[model.Experiment]: + return [e for e in model.experiments if e.state in states] + + +def any_in_state(states: List[model.ExperimentState]) -> model.Experiment: + return any(get_by_states(states)) + + +def set_to_error(experiment: model.Experiment): + """Sets the state of `experiment` to ERROR. """ + path = os.path.join( + constants.NETPYNE_WORKDIR_PATH, constants.EXPERIMENTS_FOLDER, experiment.name + ) + + try: + with open(os.path.join(path, EXPERIMENT_FILE), "r") as f: + experiment_config = json.load(f) + + with open(os.path.join(path, EXPERIMENT_FILE), "w") as f: + experiment_config["state"] = model.ExperimentState.ERROR + json.dump(experiment_config, f, default=str, sort_keys=True, indent=4) + + except IOError: + raise ExperimentsError(f"Could not find {EXPERIMENT_FILE}") + + +def get_model_specification(name: str, trial: str) -> dict: + """Returns JSON representation of the netParams & simConfig of the requested trial. + + :param name: the experiment name. + :param trial: the trial identifier. + :return: dict + """ + path = get_trial_output_path(name, trial, fallback=True) + if path is None or not os.path.exists(path): + raise ExperimentsError(f"Condition file {path} not found") + + with open(path, "r") as f: + trial_output = json.load(f) + model_spec = {} + + if "simConfig" in trial_output: + model_spec["simConfig"] = trial_output["simConfig"] + + try: + params = trial_output["net"]["params"] + except KeyError: + logging.error(f"net params is not present in {path}") + else: + model_spec["net"] = {"params": params} + + return model_spec + + +def get_trial_output_path( + experiment_name: str, trial: str, fallback: bool = False +) -> pathlib.PosixPath: + path = os.path.join(constants.EXPERIMENTS_FOLDER_PATH, experiment_name) + trial_path = next(pathlib.Path(path).glob(f"*{trial}_data.json"), None) + + if trial_path is None and fallback: + trial_path = next(pathlib.Path(path).glob(f"*{trial}_cfg.json"), None) + + return trial_path + + +def _add_experiment(experiment: model.Experiment): + if _get_by_name(experiment.name): + raise ExperimentsError(f"Experiment {experiment.name} already exists") + + model.experiments.append(experiment) + + +def _get_by_name(name: str) -> model.Experiment: + experiment = next((e for e in model.experiments if e.name == name), None) + return experiment + + +def _scan_experiments_directory() -> List[model.Experiment]: + if not pathlib.Path(constants.EXPERIMENTS_FOLDER_PATH).exists(): + return [] + + dirs = list( + [ + f + for f in os.listdir(constants.EXPERIMENTS_FOLDER_PATH) + if os.path.isdir(os.path.join(constants.EXPERIMENTS_FOLDER_PATH, f)) + ] + ) + + experiments = [] + for directory in dirs: + try: + experiment = _parse_experiment(directory) + except ExperimentsError: + logging.exception(f"Failed to parse experiment {directory}") + else: + experiments.append(experiment) + + return experiments + + +def _parse_experiment(directory: str) -> model.Experiment: + """Finds and parses Experiments stored in `directory` on the disk. + + We expect the following files to be present: + * experiment.json (Experiment model and run config) + * netParams.json + * simConfig.json + * json file for each trial in case of batch + * data files for each trial (if available) + + :raises ExperimentsError + """ + path = os.path.join( + constants.NETPYNE_WORKDIR_PATH, constants.EXPERIMENTS_FOLDER, directory + ) + + try: + with open(os.path.join(path, EXPERIMENT_FILE), "r") as f: + experiment_config = json.load(f) + except IOError: + raise ExperimentsError(f"Could not find {EXPERIMENT_FILE}") + + del experiment_config["runCfg"] + + # Convert timestamp to datetime + experiment_config["timestamp"] = datetime.datetime.fromisoformat( + experiment_config["timestamp"] + ) + + experiment = from_dict(model.Experiment, experiment_config) + experiment.folder = directory + experiment.trials = _create_trials(experiment) + return experiment + + +def _delete_experiment_folder(experiment: model.Experiment): + """Recursively deletes the associated `experiment` folder.""" + + def onerror(func, path, exc_info): + # TODO: error handling + pass + + if experiment.folder: + path = os.path.join( + constants.NETPYNE_WORKDIR_PATH, + constants.EXPERIMENTS_FOLDER, + experiment.folder, + ) + shutil.rmtree(path, onerror=onerror) + + +def _create_base_model_trial() -> model.Trial: + return model.Trial(name="Condition 1", id=BASE_TRIAL_ID) + + +def _create_trials(experiment: model.Experiment) -> List[model.Trial]: + """Gerates based on `experiment.params` all possible trial combinations. + + :param experiment: given experiment. + :return: list of generated trials. + """ + params = copy.deepcopy(experiment.params) + params = process_params(params) + + if len(experiment.params) < 1: + # No params defined -> one trial representing base model + return [_create_base_model_trial()] + + params_dict = {} + grouped_params = [] + for p in params: + params_dict[p.mapsTo] = p.values + if p.inGroup: + grouped_params.append(p.mapsTo) + + # Initialize Batch so that we can call getParamCombinations() + batch = Batch(params=params_dict, groupedParams=grouped_params) + batch.method = "grid" + batch.saveFolder = "" + batch.batchLabel = "" + + # { indices, values, labels, filenames} + combinations = batch.getParamCombinations() + if not combinations["labels"]: + return [_create_base_model_trial()] + + trials = [] + for combIdx, paramValues in enumerate(combinations["values"]): + # index of paramValues := index of labels list + # value of paramValues := parameter value + params = [{combinations["labels"][idx]: v for idx, v in enumerate(paramValues)}] + + filename = combinations["filenames"][combIdx][1:] + indices = combinations["indices"][combIdx] + name = f"Condition {combIdx + 1}" + + trials.append( + model.Trial(name=name, params=params, indices=indices, id=filename) + ) + + return trials + + +def process_params(params: List[model.ExplorationParameter]) -> List[model.ExplorationParameter]: + """Cleaning, filtering and converting of experiment `params`. + + :param params: given parameters. + :raises ExperimentsError: thrown for invalid parameter configuration. + :return: processed list of params. + """ + params = [p for p in params if p.mapsTo != ''] + + for param in params: + if param.type == "range": + if param.step > 0: + # Final values must be either of type int or float depending on the range parameters. + convert_type = int if all(type(t) == int for t in [param.min, param.max, param.step]) else float + param.values = [convert_type(e) for e in list(np.arange(param.min, param.max, param.step))] + else: + raise ExperimentsError("Invalid step value, must be greater than 0") + + elif param.type == "list": + # nothing to do here + pass + + params = [p for p in params if p.values is not None and len(p.values) > 0] + return params diff --git a/netpyne_ui/helpers/neuroml.py b/netpyne_ui/helpers/neuroml.py new file mode 100644 index 00000000..84ad5a7f --- /dev/null +++ b/netpyne_ui/helpers/neuroml.py @@ -0,0 +1,129 @@ +import os +import sys +import logging +from netpyne.specs import simConfig +from packaging import version + +import pyneuroml +from pyneuroml import pynml +from pyneuroml.lems import generate_lems_file_for_neuroml +from pyneuroml.pynml import read_neuroml2_file + +from netpyne_ui.mod_utils import loadModMechFiles + + +def convertLEMSSimulation(lemsFileName, compileMod=True): + """Converts a LEMS Simulation file + + Converts a LEMS Simulation file + (https://docs.neuroml.org/Userdocs/LEMSSimulation.html) pointing to a + NeuroML 2 file into the equivalent in NetPyNE + + Returns: + simConfig, netParams for the model in NetPyNE + """ + current_path = os.getcwd() + try: + + fullLemsFileName = os.path.abspath(lemsFileName) + tmp_path = os.path.dirname(fullLemsFileName) + if tmp_path: + os.chdir(tmp_path) + logging.info( + "Importing LEMSSimulation with NeuroML 2 network from: %s" + % fullLemsFileName + ) + + # feature to return output added in 1.0.9 + if version.parse(pyneuroml.__version__) >= version.parse("1.0.9"): + result, output_msg = pynml.run_lems_with_jneuroml_netpyne( + lemsFileName, only_generate_json=True, exit_on_fail=False, + return_string=True, max_memory="1G") + + if result is False: + raise Exception(f"Error loading lems file: {output_msg}") + else: + result = pynml.run_lems_with_jneuroml_netpyne( + lemsFileName, only_generate_json=True, exit_on_fail=False, + max_memory="1G") + + if result is False: + raise Exception("Error loading lems file") + + lems = pynml.read_lems_file(lemsFileName) + + np_json_fname = fullLemsFileName.replace('.xml','_netpyne_data.json') + + return np_json_fname + finally: + os.chdir(current_path) + + +def convertNeuroML2(nml2FileName, compileMod=True): + """Loads a NeuroML 2 file into NetPyNE + Loads a NeuroML 2 file into NetPyNE by creating a new LEMS Simulation + file (https://docs.neuroml.org/Userdocs/LEMSSimulation.html) and using + jNeuroML to convert it. + + Returns: + simConfig, netParams for the model in NetPyNE + """ + current_path = os.getcwd() + try: + fullNmlFileName = os.path.abspath(nml2FileName) + work_path = os.path.dirname(fullNmlFileName) + if not os.path.exists(work_path): + os.makedirs(work_path) + os.chdir(work_path) + sys.path.append(work_path) + + logging.info( + "Importing NeuroML 2 network from: %s" + % fullNmlFileName + ) + nml_model = read_neuroml2_file(fullNmlFileName) + + target = nml_model.networks[0].id + sim_id = "Sim_%s" % target + duration = 1000 + dt = 0.025 + lems_file_name = os.path.join(os.path.dirname(fullNmlFileName), "LEMS_%s.xml" % sim_id) + lems_file_name = "LEMS_%s.xml" % sim_id + target_dir = os.path.dirname(fullNmlFileName) + target_dir = "." + + generate_lems_file_for_neuroml( + sim_id, + fullNmlFileName, + target, + duration, + dt, + lems_file_name, + target_dir, + include_extra_files=["PyNN.xml"], + gen_plots_for_all_v=True, + plot_all_segments=False, + gen_plots_for_quantities={}, # Dict with displays vs lists of quantity paths + gen_plots_for_only_populations=[], # List of populations, all pops if = [] + gen_saves_for_all_v=True, + save_all_segments=False, + gen_saves_for_only_populations=[], # List of populations, all pops if = [] + gen_saves_for_quantities={}, # Dict with file names vs lists of quantity paths + gen_spike_saves_for_all_somas=True, + report_file_name="report.txt", + copy_neuroml=True, + verbose=True, + ) + os.chdir(work_path) + res = convertLEMSSimulation(lems_file_name, compileMod=compileMod) + finally: + os.chdir(current_path) + return res + + +if __name__ == "__main__": + + if '-nml' in sys.argv: + convertNeuroML2("../../NeuroML2/Spikers.net.nml") + else: + convertLEMSSimulation("LEMS_HHSimple.xml") diff --git a/netpyne_ui/mod_utils.py b/netpyne_ui/mod_utils.py index f3f09975..3fba08a7 100644 --- a/netpyne_ui/mod_utils.py +++ b/netpyne_ui/mod_utils.py @@ -1,3 +1,4 @@ +import logging import shutil import subprocess import os @@ -26,19 +27,33 @@ def is_loaded_mechanisms(): return True -def compileModMechFiles(compileMod, modFolder): +def loadModMechFiles(compileMod, modFolder, forceRecompile=False): # Create Symbolic link - if compileMod: - modPath = os.path.join(str(modFolder), "x86_64") - - if os.path.exists(modPath): - shutil.rmtree(modPath) - - os.chdir(modFolder) - subprocess.call(["nrnivmodl"]) - os.chdir('..') try: - neuron.load_mechanisms(str(modFolder)) - except: - raise + + owd = os.getcwd() + if compileMod: + + compiledModPath = os.path.join(str(modFolder), "x86_64") + + if os.path.exists(compiledModPath) and forceRecompile: + logging.info("Forcing mod files to recompile in %s" % modFolder) + shutil.rmtree(compiledModPath) + + if not os.path.exists(compiledModPath): + logging.info("Compiling mod files in %s" % modFolder) + os.chdir(modFolder) + subprocess.call(["nrnivmodl"]) + os.chdir('..') + + try: + neuron.load_mechanisms(str(modFolder)) + except: + logging.exception("Error loading mechanisms") + if not forceRecompile: + logging.info("Trying to recompile mod files") + loadModMechFiles(True, modFolder, forceRecompile=True) + raise + finally: + os.chdir(owd) diff --git a/netpyne_ui/model.py b/netpyne_ui/model.py new file mode 100644 index 00000000..081348aa --- /dev/null +++ b/netpyne_ui/model.py @@ -0,0 +1,95 @@ +from dataclasses import dataclass +from dataclasses import field +from datetime import datetime +from typing import List, Optional + + +def register(metadata): + # Modification of metadata to enable validation of experiment parameters. + metadata['netParams']['children']['popParams']['container'] = True + metadata['netParams']['children']['cellParams']['container'] = True + metadata['netParams']['children']['cellParams']['children']['conds']['container'] = True + metadata['netParams']['children']['cellParams']['children']['secs']['container'] = True + metadata['netParams']['children']['synMechParams']['container'] = True + metadata['netParams']['children']['connParams']['container'] = True + metadata['netParams']['children']['stimSourceParams']['container'] = True + metadata['netParams']['children']['stimTargetParams']['container'] = True + + +class ExperimentState: + DESIGN = "DESIGN" + PENDING = "PENDING" + SIMULATING = "SIMULATING" + INSTANTIATING = "INSTANTIATING" + SIMULATED = "SIMULATED" + INSTANTIATED = "INSTANTIATED" + ERROR = "ERROR" + + +@dataclass +class ExplorationParameter: + """ Parameter with possible values that will be explored in netpyne.batch. """ + + # Path to target parameter in netParams dict + mapsTo: str + # Type can be either 'list' or 'range' + type: str + # List of values of different type + values: Optional[List] = None + # Range fields + min: Optional[float] = None + max: Optional[float] = None + step: Optional[float] = None + # If True, parameter is added to grouped parameters + inGroup: bool = False + # Set in cfg.py to cfg.label = + label: str = "" + + +@dataclass +class Trial: + # Display name. + name: str = '' + # Unique id to find trial on disk. + # Concatenated str of indices e.g. "0_1_1" with 3 parameters. + id: str = '' + # [{ "paramX": 0.2, "paramY": "0.4"}] + params: list = field(default_factory=list) + indices: list = field(default_factory=list) + + +@dataclass +class Experiment: + # Name is the unique identifier + name: str + # DESIGN, INSTANTIATING, INSTANTIATED, SIMULATING, SIMULATED + state: str = ExperimentState.DESIGN + # Exploration parameter config + params: List[ExplorationParameter] = field(default_factory=list) + # Generated based on params + trials: List[Trial] = field(default_factory=list) + # SIMULATED or INSTANTIATED date + timestamp: datetime = field(default_factory=datetime.today) + + # Overwrites simConfig parameters + initConfig: dict = field(default_factory=dict) + method: str = "grid" + # Part of initCfg? + seed: Optional[int] = None + + # Folder in workspace, empty in DESIGN + folder: Optional[str] = None + + +@dataclass +class RunConfig: + """ Run config for either single or batch simulation.""" + parallel: bool = True + asynchronous: bool = True + cores: int = 1 + resource: str = "local" + # or mpi_direct (doesn't support waiting for processes to finish) + type: str = 'mpi_bulletin' + + +experiments = [] diff --git a/netpyne_ui/netpyne_geppetto.py b/netpyne_ui/netpyne_geppetto.py index bd0a6a64..8922e3c6 100644 --- a/netpyne_ui/netpyne_geppetto.py +++ b/netpyne_ui/netpyne_geppetto.py @@ -1,34 +1,84 @@ """ netpyne_geppetto.py + Initialise NetPyNE Geppetto, this class contains methods to connect NetPyNE with the Geppetto based UI """ import json import os +from os.path import join, dirname +from glob import glob +import copy +import dataclasses import importlib -import sys -import subprocess +import json import logging +import os +from pathlib import Path +import pprint import re +import sys +from shutil import copyfile +from dacite import from_dict +import base64 +import jsonpickle +import neuron +import numpy as np from netpyne import specs, sim, analysis -from netpyne.specs.utils import validateFunction from netpyne.conversion.neuronPyHoc import mechVarList from netpyne.metadata import metadata +from netpyne.specs.utils import validateFunction +from netpyne.sim import utils as netpyne_utils + +from netpyne_ui import experiments +from netpyne_ui import constants +from netpyne_ui import model +from netpyne_ui import simulations +from netpyne_ui import utils as netpyne_ui_utils from netpyne_ui.netpyne_model_interpreter import NetPyNEModelInterpreter +from netpyne_ui.simulations import InvalidConfigError from pygeppetto.model.model_serializer import GeppettoModelSerializer -import matplotlib.pyplot as plt from pygeppetto import ui -import numpy as np -import neuron -from shutil import copyfile from jupyter_geppetto import jupyter_geppetto, synchronization, utils from contextlib import redirect_stdout from netpyne_ui.constants import NETPYNE_WORKDIR_PATH, NUM_CONN_LIMIT -from netpyne_ui.mod_utils import compileModMechFiles - -os.chdir(NETPYNE_WORKDIR_PATH) - -neuron.nrn_dll_loaded.append(os.path.join(NETPYNE_WORKDIR_PATH, 'mod')) # Avoids to load workspace modfiles twice +from netpyne_ui.mod_utils import loadModMechFiles + +os.chdir(constants.NETPYNE_WORKDIR_PATH) + + +class NetpyneValidationError(Exception): + ... + + +def deepcopy_wout_empty(d, memo=None): + def is_empty(x): + return x == '' or x == [] or x == () or x == set() or x == {} or x is None + + # if is_empty(d): + # return None + memo = {} if memo is None else memo + if id(d) in memo: + return memo[id(d)] + if isinstance(d, dict): + cpy = {} + for k, v in d.items(): + v_cpy = deepcopy_wout_empty(v, memo=memo) + if is_empty(v_cpy): + continue + cpy[k] = memo.setdefault(id(v), v_cpy) + return cpy + elif isinstance(d, (list, set, tuple)): + return d.__class__(memo.setdefault(id(v), deepcopy_wout_empty(v, memo=memo)) for v in d if not is_empty(v)) + elif hasattr(d, '__dict__'): + cpy = d.__new__(d.__class__) # We skip the initializer, in case it needs some arguments + for k, v in d.__dict__.items(): + v_cpy = deepcopy_wout_empty(v, memo=memo) + # if is_empty(v_cpy): # + # continue + cpy.__dict__[k] = memo.setdefault(id(v), v_cpy) + return cpy + return d class NetPyNEGeppetto: @@ -36,13 +86,33 @@ class NetPyNEGeppetto: def __init__(self): self.model_interpreter = NetPyNEModelInterpreter() + # Geppetto model of a created network + self.geppetto_model = None + self.netParams = specs.NetParams() self.simConfig = specs.SimConfig() + self.run_config = model.RunConfig() + self.simConfig.recordTraces = {'V_soma': {'sec':'soma', 'loc':0.5, 'var':'v'}} + + self.experiments = experiments + + model.register(metadata) + synchronization.startSynchronization(self.__dict__) logging.debug("Initializing the original model") jupyter_geppetto.context = {'netpyne_geppetto': self} + # Set running experiments without any subprocess to ERRROR + experiments.get_experiments() + running_exps = experiments.get_by_states([ + model.ExperimentState.PENDING, + model.ExperimentState.SIMULATING, + model.ExperimentState.INSTANTIATING + ]) + if not simulations.local.is_running(): + [experiments.set_to_error(e) for e in running_exps] + def getData(self): return { "metadata": metadata, @@ -50,73 +120,359 @@ def getData(self): "simConfig": self.simConfig.todict(), "isDocker": os.path.isfile('/.dockerenv'), "currentFolder": os.getcwd(), - "tuts": self.find_tutorials() + "tuts": self.find_tutorials(), + "cores": simulations.local.cpus } - def find_tutorials(self): - from os import listdir - from os.path import isfile, join - onlyfiles = [f for f in listdir(NETPYNE_WORKDIR_PATH) if isfile(join(NETPYNE_WORKDIR_PATH, f))] + def getModelAsJson(self): + # TODO: netpyne should offer a method asJSON (#240) + # that returns the JSON model without dumping to to disk. + obj = netpyne_utils.replaceFuncObj({"netParams": self.netParams.__dict__, "simConfig": self.simConfig.__dict__}) + obj = netpyne_utils.replaceDictODict(obj) + return obj + + def get_run_configuration(self): + return dataclasses.asdict(self.run_config) + + def edit_run_configuration(self, configDictionary: dict): + self.run_config = from_dict(model.RunConfig, configDictionary) - def _filter(_file): - return '.py' in _file and 'tut' in _file and 'gui' in _file + def cloneExperiment(self, payload: dict): + """ Loads experiment from disk and replaces experiment in design with it. - return list(filter(_filter, onlyfiles)) + 1. Replaces current experiment in design with copy of stored experiment. + 2. Replace current model specification with spec of stored experiment. + + :param payload: { name: str, replaceModelSpec: bool, replaceExperiment: bool } + """ + name = payload.get('name') + + # Creates new Experiment in design based on `name` experiment. + if payload.get('replaceExperiment', True): + experiments.replace_current_with(name) + + # Replaces model specification + if payload.get('replaceModelSpec', True): + path = os.path.join(constants.EXPERIMENTS_FOLDER_PATH, name) + if self.doIhaveInstOrSimData()['haveInstance']: + sim.clearAll() + + sim.initialize() + sim.loadNetParams(os.path.join(path, experiments.NET_PARAMS_FILE)) + sim.loadSimCfg(os.path.join(path, experiments.SIM_CONFIG_FILE)) + self.netParams = sim.net.params + self.simConfig = sim.cfg + netpyne_ui_utils.remove(self.simConfig.todict()) + netpyne_ui_utils.remove(self.netParams.todict()) + + def viewExperimentResult(self, payload: dict): + """ Loads the output file of a simulated experiment trial. + + :param payload: {name: str, trial: str, onlyModelSpecification: bool} + :return: geppetto model + """ + name = payload.get("name", None) + trial = payload.get("trial", None) + only_model_spec = payload.get("onlyModelSpecification", False) + + file = experiments.get_trial_output_path(name, trial) + if file is None or not os.path.exists(file): + return utils.getJSONError(f"Couldn't find output file of condition. Please take a look at the simulation log.", "") + + if self.doIhaveInstOrSimData()['haveInstance']: + sim.clearAll() + + sim.initialize() + + if only_model_spec: + # Load only model specification + sim.loadNetParams(file) + sim.loadSimCfg(file) + self.netParams = sim.net.params + self.simConfig = sim.cfg + netpyne_ui_utils.remove(self.simConfig.todict()) + netpyne_ui_utils.remove(self.netParams.todict()) + return + else: + # Load the complete simulation + sim.loadAll(file) + self._create3D_shapes(file) + self.geppetto_model = self.model_interpreter.getGeppettoModel(sim) + return json.loads(GeppettoModelSerializer.serialize(self.geppetto_model)) + + def stopExperiment(self, experiment_name): + simulations.local.stop() + return { + "message": f"Stopped simulation of {experiment_name}" + } + + def find_tutorials(self): + return glob(join(NETPYNE_WORKDIR_PATH, "**/gui_tut*.py"), recursive=True) def instantiateNetPyNEModelInGeppetto(self, args): try: with redirect_stdout(sys.__stdout__): - if not 'usePrevInst' in args or not args['usePrevInst']: + if not args.get("usePrevInst", False): + if self.doIhaveInstOrSimData()['haveInstance']: + sim.clearAll() netpyne_model = self.instantiateNetPyNEModel() self.geppetto_model = self.model_interpreter.getGeppettoModel(netpyne_model) return json.loads(GeppettoModelSerializer.serialize(self.geppetto_model)) - except: - return utils.getJSONError("Error while instantiating the NetPyNE model", sys.exc_info()) + except NetpyneValidationError as e: + message = ("Error while validating the NetPyNE model before instantiation.\n" + "One or more components in your model have issues, see details below:") + logging.exception(message) + return utils.getJSONError(message, '\n'.join(e.args)) + except Exception as e: + message = "Error while instantiating the NetPyNE model" + logging.exception(message) + return utils.getJSONError(message, sys.exc_info()) + + def simulate_experiment_trials(self, experiment: model.Experiment): + try: + working_directory = self._prepare_batch_files(experiment) + except OSError: + experiment.state = model.ExperimentState.ERROR + return utils.getJSONError("The specified folder already exists", "") + logging.info("Running experiment %s combinations", experiment.name) + try: + simulations.run( + platform="local", + parallel=self.run_config.parallel, + cores=self.run_config.cores, + method=self.run_config.type, + batch=True, + asynchronous=self.run_config.asynchronous, + working_directory=working_directory + ) + except InvalidConfigError as e: + experiment.state = model.ExperimentState.ERROR + logging.error("Error running experiment %s: %s", experiment.name, str(e)) + return utils.getJSONError(str(e), "") + + if self.run_config.asynchronous: + message = f"Experiment {experiment.name} started. " \ + f"You can view the Experiment status in the Experiment Manager." + else: + message = f"Experiment {experiment.name} finished, you can view the results in the Experiment Manager." + + return dict(message=message) + + def simulate_single_model(self, experiment: model.Experiment = None, use_prev_inst: bool = False): + if experiment: + working_directory = self._prepare_simulation_files(experiment, use_prev_inst) + + simulations.run( + parallel=self.run_config.parallel, + cores=self.run_config.cores, + asynchronous=self.run_config.asynchronous, + method=simulations.MPI_BULLETIN, + working_directory=working_directory, + ) + + if self.run_config.asynchronous: + message = "Experiment is pending! " \ + f"Results will be stored in your workspace at ./{os.path.join(constants.EXPERIMENTS_FOLDER, experiment.name)}" + return dict(message=message) + else: + sim.load(f'{constants.MODEL_OUTPUT_FILENAME}.json') + self.geppetto_model = self.model_interpreter.getGeppettoModel(sim) + response = json.loads(GeppettoModelSerializer.serialize(self.geppetto_model)) + return response + + else: + # Run in same process + if not use_prev_inst: + logging.debug('Instantiating single thread simulation') + netpyne_model = self.instantiateNetPyNEModel() + + self.geppetto_model = self.model_interpreter.getGeppettoModel(netpyne_model) + + simulations.run() + + if self.geppetto_model: + response = json.loads(GeppettoModelSerializer.serialize(self.geppetto_model)) + return response + + + def validate_netParams(self): + cpy = deepcopy_wout_empty(self.netParams) + _, failed = sim.validator.validateNetParams(cpy) + if failed: + message = "" + components_error = {} + for entry in failed: + components_error.setdefault(entry.component, []).append((entry.keyPath, entry.summary)) + for component, details in components_error.items(): + message = message + f"* Error validating {component}\n" + for (keyPath, summary) in details: + path = ' -> '.join(f"{key}" for key in keyPath) + message = message + f" Error in {path}\n" + for line in summary: + message = message + f" {line}\n" + message = message + "\n" + raise NetpyneValidationError(message) + def simulateNetPyNEModelInGeppetto(self, args): + """ Starts simulation of the currently loaded NetPyNe model. + + * runConfiguration is used to determine asynch/synch & other parameters. + * complete flag in args decides if we simulate single model as Experiment or complete Experiment. + * if Experiment in design does not exist, we create a new one & start single sim. + * All Simulations run in different process. + + :param args: { allTrials: bool, usePrevInst: bool } + :return: geppetto model. + """ + allTrials = args.get('allTrials', True) + use_prev_inst = args.get('usePrevInst', False) + sim_id = args.get('simId', 0) try: - with redirect_stdout(sys.__stdout__): - # TODO mpi is not finding libmpi.dylib.. set LD_LIBRARY_PATH to openmpi bin folder, but nothing - if args['parallelSimulation']: - logging.debug('Running parallel simulation') - if not 'usePrevInst' in args or not args['usePrevInst']: - self.netParams.save("netParams.json") - self.simConfig.saveJson = True - self.simConfig.save("simParams.json") - template = os.path.join(os.path.dirname(__file__), 'template.py') + self.validate_netParams() + + experiment = experiments.get_current() + if experiment: + if self.experiments.any_in_state([model.ExperimentState.PENDING, model.ExperimentState.SIMULATING]): + return utils.getJSONError("Experiment is already simulating or pending", "") + + if simulations.local.is_running(): + simulations.local.stop() + + experiment.state = model.ExperimentState.PENDING + + try: + if allTrials: + if len(experiment.trials) == 1 and experiment.trials[0].id == experiments.BASE_TRIAL_ID: + # special case where we don't want to run a batch simulation + return self.simulate_single_model(experiment, use_prev_inst) + else: + return self.simulate_experiment_trials(experiment) else: - sim.cfg.saveJson = True - oldName = sim.cfg.filename - sim.cfg.filename = 'model_output' - sim.saveData() - sim.cfg.filename = oldName - template = os.path.join(os.path.dirname(__file__), 'template2.py') - copyfile(template, './init.py') - - cp = subprocess.run(["mpiexec", "-n", args['cores'], "nrniv", "-mpi", "-python", "init.py"], - capture_output=True) - print(cp.stdout.decode() + cp.stderr.decode()) - if cp.returncode != 0: return utils.getJSONError("Error while simulating the NetPyNE model", - cp.stderr.decode()) - sim.load('model_output.json') - self.geppetto_model = self.model_interpreter.getGeppettoModel(sim) - netpyne_model = sim + return self.simulate_single_model(experiment, use_prev_inst) + except Exception: + experiment.state = model.ExperimentState.ERROR + message = f"Unknown error during simulation of Experiment. SimulationId {sim_id}" + logging.exception(message) + # return utils.getJSONError("Unknown error during simulation of Experiment", sys.exc_info(), { "sim_id": sim_id}) + return utils.getJSONError("Unknown error during simulation of Experiment", sys.exc_info()) - else: - logging.info("Starting simulation") + else: + return self.simulate_single_model(use_prev_inst=use_prev_inst) + except NetpyneValidationError as e: + message = (f"Error while validating the NetPyNE model before simulation {sim_id}.\n" + "One or more components in your model have issues, see details below:") + logging.exception(message) + return utils.getJSONError(message, '\n'.join(e.args)) + + except Exception as e : + message = f"Error while simulating the NetPyNE model: {e}. SimulationId {sim_id}" + logging.exception(message) + return utils.getJSONError(message, sys.exc_info()) + + def _prepare_simulation_files(self, experiment: model.Experiment = None, use_prev_inst: bool = False) -> str: + """Prepares template files and netpyne model files for a single simulation """ + exp = copy.deepcopy(experiment) + # Remove parameter & trials for single run + exp.params = [] + exp.trials = [] + + save_folder_path = os.path.join(constants.NETPYNE_WORKDIR_PATH, constants.EXPERIMENTS_FOLDER, exp.name) + try: + os.makedirs(save_folder_path) + except OSError: + raise - if not args.get('usePrevInst', False): - logging.debug('Instantiating single thread simulation') - netpyne_model = self.instantiateNetPyNEModel() - self.geppetto_model = self.model_interpreter.getGeppettoModel(netpyne_model) + if use_prev_inst: + sim.cfg.saveJson = True + oldName = sim.cfg.filename + sim.cfg.filename = constants.MODEL_OUTPUT_FILENAME - logging.debug('Running single thread simulation') - netpyne_model = self.simulateNetPyNEModel() + # workaround for issue with empty LFP dict when calling saveData() + if 'LFP' in sim.allSimData: + del sim.allSimData['LFP'] - return json.loads(GeppettoModelSerializer.serialize(self.geppetto_model)) - except: - return utils.getJSONError("Error while simulating the NetPyNE model", sys.exc_info()) + # TODO: store in experiments folder! + sim.saveData() + sim.cfg.filename = oldName + template_name = constants.TEMPLATE_FILENAME_SINGLE_RUN_INSTANTIATED + else: + # Create netParams and SimConfig + self.netParams.save(os.path.join(save_folder_path, experiments.NET_PARAMS_FILE)) + + simCfg = copy.copy(self.simConfig) + # filename and simLabel must be set to define the output filename + simCfg.saveJson = True + simCfg.filename = 'model_output' + simCfg.simLabel = 'model_output' + simCfg.saveDataInclude = [ + "simData", + "simConfig", + "netParams", + "net" + ] + simCfg.save(os.path.join(save_folder_path, experiments.SIM_CONFIG_FILE)) + + template_name = constants.TEMPLATE_FILENAME_SINGLE_RUN + + # Create Experiment Config + config_dict = dataclasses.asdict(exp) + config_dict["runCfg"] = dataclasses.asdict(self.run_config) + experiment_config = os.path.join(save_folder_path, experiments.EXPERIMENT_FILE) + json.dump(config_dict, open(experiment_config, 'w'), default=str, sort_keys=True, indent=4) + + # Copy Template + template = os.path.join(os.path.dirname(__file__), "templates", template_name) + copyfile(template, os.path.join(save_folder_path, constants.SIMULATION_SCRIPT_NAME)) + + return save_folder_path + + def _prepare_batch_files(self, experiment: model.Experiment) -> str: + """Creates template files and netpyne model files in the experiment folder. + + Only for an experiment consisting of many trials. + + :param experiment: given experiment + :return: working directory path + """ + exp = copy.deepcopy(experiment) + exp.params = self.experiments.process_params(exp.params) + + netParams = copy.deepcopy(self.netParams) + netParams.mapping = {p.mapsTo.replace('netParams.', ''): p.mapsTo.split('.')[1::] for p in exp.params if 'netParams' in p.mapsTo} + + simCfg = copy.copy(self.simConfig) + simCfg.saveJson = True + simCfg.saveDataInclude = [ + "simData", + "simConfig", + "netParams", + "net" + ] + + config_dict = dataclasses.asdict(exp) + config_dict["runCfg"] = dataclasses.asdict(self.run_config) + + save_folder_path = os.path.join(constants.NETPYNE_WORKDIR_PATH, constants.EXPERIMENTS_FOLDER, exp.name) + try: + os.makedirs(save_folder_path) + except OSError: + raise + + simCfg.save(os.path.join(save_folder_path, experiments.SIM_CONFIG_FILE)) + netParams.save(os.path.join(save_folder_path, experiments.NET_PARAMS_FILE)) + + experiment_json = os.path.join(save_folder_path, experiments.EXPERIMENT_FILE) + json.dump(config_dict, open(experiment_json, 'w'), default=str, sort_keys=True, indent=4) + + template_single_run = os.path.join(os.path.dirname(__file__), "templates", constants.TEMPLATE_FILENAME_BATCH_RUN) + template_batch = os.path.join(os.path.dirname(__file__), "templates", constants.TEMPLATE_FILENAME_BATCH) + copyfile(template_single_run, os.path.join(save_folder_path, 'run.py')) + # TODO: name should be batch.py not init.py + copyfile(template_batch, os.path.join(save_folder_path, constants.SIMULATION_SCRIPT_NAME)) + + return save_folder_path def loadModel(self, args): """ Imports a model stored as file in json format. @@ -124,25 +480,16 @@ def loadModel(self, args): :param args: :return: """ - - def remove(dictionary): - # remove reserved keys such as __dict__, __Method__, etc - # they appear when we do sim.loadAll(json_file) - if isinstance(dictionary, dict): - for key, value in list(dictionary.items()): - if key.startswith('__'): - dictionary.pop(key) - else: - remove(value) - if not any([args[option] for option in ['loadNetParams', 'loadSimCfg', 'loadSimData', 'loadNet']]): return utils.getJSONError("Error while loading data", 'You have to select at least one option') try: owd = os.getcwd() - compileModMechFiles(args['compileMod'], args['modFolder']) - except: - return utils.getJSONError("Error while importing/compiling mods", sys.exc_info()) + loadModMechFiles(args['compileMod'], args['modFolder']) + except Exception: + message = "Error while importing/compiling mods" + logging.exception(message) + return utils.getJSONError(message, sys.exc_info()) finally: os.chdir(owd) @@ -155,11 +502,12 @@ def remove(dictionary): if self.doIhaveInstOrSimData()['haveInstance']: sim.clearAll() sim.initialize() - sim.loadAll(args['jsonModelFolder']) + sim.loadAll(args['jsonModelFolder'], instantiate=False) self.netParams = sim.net.params self.simConfig = sim.cfg - remove(self.netParams.todict()) - remove(self.simConfig.todict()) + self.simConfig.saveCellSecs = True + netpyne_ui_utils.remove(self.netParams.todict()) + netpyne_ui_utils.remove(self.simConfig.todict()) else: if args['loadNet']: wake_up_geppetto = True @@ -168,7 +516,8 @@ def remove(dictionary): sim.initialize() sim.loadNet(args['jsonModelFolder']) - if args['loadSimData']: # TODO (https://github.com/Neurosim-lab/netpyne/issues/360) + # TODO (https://github.com/Neurosim-lab/netpyne/issues/360) + if args['loadSimData']: wake_up_geppetto = True if not self.doIhaveInstOrSimData()['haveInstance']: sim.create(specs.NetParams(), specs.SimConfig()) @@ -179,30 +528,69 @@ def remove(dictionary): if args['loadSimCfg']: sim.loadSimCfg(args['jsonModelFolder']) self.simConfig = sim.cfg - remove(self.simConfig.todict()) + netpyne_ui_utils.remove(self.simConfig.todict()) if args['loadNetParams']: if self.doIhaveInstOrSimData()['haveInstance']: sim.clearAll() sim.loadNetParams(args['jsonModelFolder']) self.netParams = sim.net.params - remove(self.netParams.todict()) + netpyne_ui_utils.remove(self.netParams.todict()) if wake_up_geppetto: - if len(sim.net.cells) > 0: - section = list(sim.net.cells[0].secs.keys())[0] - if 'pt3d' not in list(sim.net.cells[0].secs[section].geom.keys()): - sim.net.defineCellShapes() - sim.gatherData() - sim.loadSimData(args['jsonModelFolder']) + self._create3D_shapes(args['jsonModelFolder']) + # TODO: Fix me - gatherData will remove allSimData! sim.gatherData() + self.geppetto_model = self.model_interpreter.getGeppettoModel(sim) return json.loads(GeppettoModelSerializer.serialize(self.geppetto_model)) else: return utils.getJSONReply() - except: - return utils.getJSONError("Error while loading the NetPyNE model", sys.exc_info()) + except Exception: + message = "Error while loading the NetPyNE model" + logging.exception(message) + return utils.getJSONError(message, sys.exc_info()) + + def _create3D_shapes(self, json_path: str): + """ Creates cellShapes for 3D viewer. + + Performed as final step after `json_path` was loaded. + """ + if len(sim.net.cells) > 0: + section = list(sim.net.cells[0].secs.keys())[0] + if 'pt3d' not in list(sim.net.cells[0].secs[section].geom.keys()): + sim.net.defineCellShapes() + sim.gatherData() + # Load again because gatherData removed simData + sim.loadSimData(json_path) + + def loadFromIndexFile(self, json_path: str): + cfg, netParams = sim.loadModel(json_path, loadMechs=True, ignoreMechAlreadyExistsError=True) + self.simConfig = cfg + self.netParams = netParams + + if isinstance(self.netParams, dict): + self.netParams = specs.NetParams(self.netParams) + + if isinstance(self.simConfig, dict): + self.simConfig = specs.SimConfig(self.simConfig) + + for key, value in self.netParams.cellParams.items(): + if hasattr(value, 'todict'): + self.netParams.cellParams[key] = value.todict() + + # TODO: when should sim.initialize be called? + # Only on import or better before every simulation or network instantiation? + sim.initialize() + + def saveToIndexFile(self, srcPath, dstPath, exportNetParamsAsPython, exportSimConfigAsPython): + sim.saveModel(netParams=self.netParams, + simConfig=self.simConfig, + srcPath=srcPath, + dstPath=dstPath, + exportNetParamsAsPython=exportNetParamsAsPython, + exportSimConfigAsPython=exportSimConfigAsPython) def importModel(self, modelParameters): """ Imports a model stored in form of Python files. @@ -214,13 +602,16 @@ def importModel(self, modelParameters): # TODO: this must be integrated into the general lifecycle of "model change -> simulate" # Shouldn't be specific to Import sim.clearAll() - + try: + loadModMechFiles(modelParameters['compileMod'], modelParameters['modFolder'], modelParameters.get("forceRecompile", True)) + except Exception: + message = "Error while importing/compiling mods" + logging.exception(message) + return utils.getJSONError(message, sys.exc_info()) try: # Get Current dir owd = os.getcwd() - compileModMechFiles(modelParameters['compileMod'], modelParameters['modFolder']) - with redirect_stdout(sys.__stdout__): # NetParams net_params_path = str(modelParameters["netParamsPath"]) @@ -231,6 +622,12 @@ def importModel(self, modelParameters): # Import Model attributes self.netParams = getattr(net_params_module_name, str(modelParameters["netParamsVariable"])) + if isinstance(self.netParams, dict): + self.netParams = specs.NetParams(self.netParams) + + if isinstance(self.simConfig, dict): + self.simConfig = specs.SimConfig(self.simConfig) + for key, value in self.netParams.cellParams.items(): if hasattr(value, 'todict'): self.netParams.cellParams[key] = value.todict() @@ -249,7 +646,69 @@ def importModel(self, modelParameters): sim.initialize() return utils.getJSONReply() except: - return utils.getJSONError("Error while importing the NetPyNE model", sys.exc_info()) + message = "Error while importing the NetPyNE model" + logging.exception(message) + return utils.getJSONError(message, sys.exc_info()) + finally: + os.chdir(owd) + + def importNeuroML(self, modelParameters): + from netpyne_ui.helpers import neuroml + + + try: + # Get Current dir + owd = os.getcwd() + + with redirect_stdout(sys.__stdout__): + # NetParams + filename = str(modelParameters["fileName"]) + + json_fname = neuroml.convertNeuroML2(filename, compileMod=modelParameters["compileMod"]) + + return self.loadModel(args=dict( + compileMod=True, + modFolder=os.path.dirname(json_fname), + jsonModelFolder=json_fname, + loadNet=True, + loadSimData=True, + loadSimCfg=True, + loadNetParams=True + )) + except: + message = "Error while importing the NetPyNE model" + logging.exception(message) + return utils.getJSONError(message, sys.exc_info()) + finally: + os.chdir(owd) + + def importLEMS(self, modelParameters): + from netpyne_ui.helpers import neuroml + + + try: + # Get Current dir + owd = os.getcwd() + + with redirect_stdout(sys.__stdout__): + # NetParams + filename = str(modelParameters["fileName"]) + + json_fname = neuroml.convertLEMSSimulation(filename) + + return self.loadModel(args=dict( + compileMod=True, + modFolder=os.path.dirname(json_fname), + jsonModelFolder=json_fname, + loadNet=True, + loadSimData=True, + loadSimCfg=True, + loadNetParams=True + )) + except Exception: + message = "Error while importing the NetPyNE model" + logging.exception(message) + return utils.getJSONError(message, sys.exc_info()) finally: os.chdir(owd) @@ -262,7 +721,7 @@ def importCellTemplate(self, modelParameters): conds = {} if rule not in self.netParams.cellParams else self.netParams.cellParams[rule]['conds'] - compileModMechFiles(modelParameters["compileMod"], modelParameters["modFolder"]) + loadModMechFiles(modelParameters["compileMod"], modelParameters["modFolder"]) del modelParameters["modFolder"] del modelParameters["compileMod"] @@ -273,8 +732,10 @@ def importCellTemplate(self, modelParameters): self.netParams.cellParams[rule] = self.netParams.cellParams[rule].todict() return utils.getJSONReply() - except: - return utils.getJSONError("Error while importing the NetPyNE cell template", sys.exc_info()) + except Exception: + message = "Error while importing the NetPyNE cell template" + logging.exception(message) + return utils.getJSONError(message, sys.exc_info()) finally: os.chdir(owd) @@ -284,29 +745,33 @@ def exportModel(self, args): if not args['netCells']: sim.initialize(netParams=self.netParams, simConfig=self.simConfig) sim.cfg.filename = args['fileName'] - include = [el for el in specs.SimConfig().saveDataInclude if el in args.keys() and args[el]] + sim_config_data_include = specs.SimConfig().saveDataInclude + include = [el for el in sim_config_data_include if args.get(el, False)] if args['netCells']: include += ['netPops'] sim.cfg.saveJson = True sim.saveData(include) sim.cfg.saveJson = False - with open(f"{sim.cfg.filename}.json") as json_file: + with open(f"{sim.cfg.filename}_data.json") as json_file: data = json.load(json_file) return data - return utils.getJSONReply() - except: - return utils.getJSONError("Error while exporting the NetPyNE model", sys.exc_info()) + except Exception: + message = "Error while exporting the NetPyNE model" + logging.exception(message) + return utils.getJSONError(message, sys.exc_info()) def exportNeuroML(self, modelParams): try: with redirect_stdout(sys.__stdout__): sim.exportNeuroML2(modelParams['fileName'], specs.SimConfig()) return utils.getJSONReply() - except: - return utils.getJSONError("Error while exporting the NetPyNE model", sys.exc_info()) + except Exception: + message = "Error while exporting the NetPyNE model" + logging.exception(message) + return utils.getJSONError(message, sys.exc_info()) - def importNeuroML(self, modelParams): + def importNeuroMLOLD(self, modelParams): try: with redirect_stdout(sys.__stdout__): sim.initialize() @@ -315,8 +780,10 @@ def importNeuroML(self, modelParams): self.geppetto_model = self.model_interpreter.getGeppettoModel(sim) return json.loads(GeppettoModelSerializer.serialize(self.geppetto_model)) - except: - return utils.getJSONError("Error while exporting the NetPyNE model", sys.exc_info()) + except Exception: + message = "Error while exporting the NetPyNE model" + logging.exception(message) + return utils.getJSONError(message, sys.exc_info()) def deleteModel(self, modelParams): try: @@ -325,35 +792,33 @@ def deleteModel(self, modelParams): self.simConfig = specs.SimConfig() sim.initialize(specs.NetParams(), specs.SimConfig()) self.geppetto_model = None - except: - return utils.getJSONError("Error while exporting the NetPyNE model", sys.exc_info()) + except Exception: + message = "Error while exporting the NetPyNE model" + logging.exception(message) + return utils.getJSONError(message, sys.exc_info()) try: - # This function fails is some keys don't exists - # sim.clearAll() - # TODO: as part of #264 we should remove the method and use clearAll intstead - self.clearSim() + sim.clearAll() except: - pass + logging.exception("Failed to clear simulation") return utils.getJSONReply() def instantiateNetPyNEModel(self): + self.validate_netParams() with redirect_stdout(sys.__stdout__): saveData = sim.allSimData if hasattr(sim, 'allSimData') and 'spkt' in sim.allSimData.keys() and len( sim.allSimData['spkt']) > 0 else False + + #netcoded = jsonpickle.encode(self.netParams, unpicklable=False) + #simcoded = jsonpickle.encode(self.simConfig, unpicklable=False) sim.create(self.netParams, self.simConfig) sim.net.defineCellShapes() # creates 3d pt for cells with stylized geometries sim.gatherData(gatherLFP=False) - if saveData: sim.allSimData = saveData # preserve data from previous simulation - return sim + if saveData: + sim.allSimData = saveData # preserve data from previous simulation - def simulateNetPyNEModel(self): - with redirect_stdout(sys.__stdout__): - sim.setupRecording() - sim.simulate() - sim.saveData() return sim def doIhaveInstOrSimData(self): @@ -375,17 +840,21 @@ def doIhaveInstOrSimData(self): return {'haveInstance': out[0], 'haveSimData': out[1]} def rename(self, path, oldValue, newValue): - command = 'sim.rename(self.' + path + ',"' + oldValue + '","' + newValue + '")' + # command = 'sim.rename(self.' + path + ',"' + oldValue + '","' + newValue + '")' + command = f'sim.rename(self.{path}, {oldValue!r}, {newValue!r})' logging.debug('renaming ' + command) + eval(command) for model, synched_component in list(jupyter_geppetto.synched_models.items()): if model != '' and oldValue in model and path in model: # jupyter_geppetto.synched_models.pop(model) - newModel = re.sub("(['])(?:(?=(\\?))\2.)*?\1", lambda x: x.group(0).replace(oldValue, newValue, 1), - model) - logging.debug("Rename funct - Model is " + model + " newModel is " + newModel) - jupyter_geppetto.synched_models[newModel] = synched_component + new_model = re.sub("(['])(?:(?=(\\?))\2.)*?\1", + lambda x: x.group(0).replace(oldValue, newValue, 1), + model) + logging.debug("Rename funct - Model is " + model + " newModel is " + new_model) + jupyter_geppetto.synched_models[new_model] = synched_component + with redirect_stdout(sys.__stdout__): if "popParams" in path: self.propagate_field_rename("pop", newValue, oldValue) @@ -401,10 +870,21 @@ def getPlotSettings(self, plot_name): return self.simConfig.analysis[plot_name] return {} - def getDirList(self, dir=None, onlyDirs=False, filterFiles=False): + def checkFileExists(self, path): + path = Path(path or '') + return path.exists() + + def getFullPath(self, dir, subDir): + if dir is None or dir == '': + base = constants.NETPYNE_WORKDIR_PATH + if subDir: + base = os.path.join(base, subDir) + dir = os.path.join(os.getcwd(), base) + return dir + + def getDirList(self, dir=None, onlyDirs=False, filterFiles=False, subDir=None): # Get Current dir - if dir == None or dir == '': - dir = os.path.join(os.getcwd(), NETPYNE_WORKDIR_PATH) + dir = self.getFullPath(dir, subDir) dir_list = [] file_list = [] for f in sorted(os.listdir(str(dir)), key=str.lower): @@ -422,6 +902,13 @@ def checkAvailablePlots(self): def getPlot(self, plotName, LFPflavour, theme='gui'): try: with redirect_stdout(sys.__stdout__): + availablePlots = self.checkAvailablePlots() + checkCondition = availablePlots.get(plotName.replace('iplot', 'plot'), False) + + if checkCondition is False: + logging.info("Plot " + plotName + " not available") + return -1 + args = self.getPlotSettings(plotName) if LFPflavour: args['plots'] = [LFPflavour] @@ -432,9 +919,15 @@ def getPlot(self, plotName, LFPflavour, theme='gui'): # This arg brings dark theme. But some plots are broken by it args['theme'] = theme - if plotName in ("iplotConn", "iplot2Dnet") and sim.net.allCells: + if plotName in ("iplotConn", "iplot2Dnet") and hasattr(sim, 'net') and sim.net.allCells: + def conns_length(cell) -> int: + if type(cell) is dict: + return len(cell.get('conns', [])) + else: + return len(getattr(cell, 'conns', [])) + # To prevent unresponsive kernel, we don't show conns if they become too many - num_conn = sum([len(cell.conns) for cell in sim.net.allCells if cell.conns]) + num_conn = sum([conns_length(cell) for cell in sim.net.allCells]) if num_conn > NUM_CONN_LIMIT: args["showConns"] = False @@ -449,11 +942,9 @@ def getPlot(self, plotName, LFPflavour, theme='gui'): return html else: - - figData = getattr(analysis, plotName)(**args) - - if isinstance(figData, tuple): - fig = figData[0] + fig_data = getattr(analysis, plotName)(**args) + if isinstance(fig_data, tuple): + fig = fig_data[0] if fig == -1: return fig elif isinstance(fig, list): @@ -466,9 +957,13 @@ def getPlot(self, plotName, LFPflavour, theme='gui'): else: return [ui.getSVG(fig)] else: - return figData + if plotName == 'plotEEG': + return self.simConfig.filename + '_EEG.png' + elif plotName == 'plotDipole': + return self.simConfig.filename + '_dipole.png' + else: + return fig_data except Exception as e: - # TODO: Extract these two lines as a function and call it in every catch clause err = "There was an exception in %s():" % (e.plotName) logging.exception(("%s \n %s \n%s" % (err, e, sys.exc_info()))) @@ -476,19 +971,23 @@ def getAvailablePops(self): return list(self.netParams.popParams.keys()) def getAvailableCellModels(self): - cellModels = set([]) + cell_models = set([]) for p in self.netParams.popParams: if 'cellModel' in self.netParams.popParams[p]: cm = self.netParams.popParams[p]['cellModel'] - if cm not in cellModels: - cellModels.add(cm) - return list(cellModels) + if cm not in cell_models: + cell_models.add(cm) + return list(cell_models) - def getAvailableCellTypes(self): - cellTypes = set([]) - for p in self.netParams.cellParams: - cellTypes.add(p) - return list(cellTypes) + def getAvailableCellModels(self): + return ["", "VecStim", "NetStim", "IntFire1"] + + def getAvailableStimulationDistribution(self): + return ["normal", "uniform"] + + def getAvailableStimulationPattern(self): + # self.netParams.popParams[name]['spikePattern'] = {} + return ["", "rhythmic", "evoked", "poisson", "gauss"] def getAvailableSections(self): sections = {} @@ -496,9 +995,40 @@ def getAvailableSections(self): sections[cellRule] = list(self.netParams.cellParams[cellRule]['secs'].keys()) return sections + def getAvailableCellTypes(self): + cell_types = set([]) + cell_types.add('all') + for p in self.netParams.cellParams: + cell_types.add(p) + return sorted(cell_types) + + def getAvailableDensityTypes(self): + return ['uniform', '1DMap', '2DMap', 'distance'] + + def getAvailableRxDSections(self, selectedRegion = None): + sections = set([]) + sections.add('all') + if selectedRegion and selectedRegion in self.netParams.rxdParams.regions and self.netParams.rxdParams.regions[selectedRegion].get('cells'): + if 'all' in self.netParams.rxdParams.regions[selectedRegion]['cells']: + for cellRule in self.netParams.cellParams: + for cellSect in self.netParams.cellParams[cellRule]['secs']: + sections.add(cellSect) + else: + for cellRule in self.netParams.cellParams: + if cellRule in self.netParams.rxdParams.regions[selectedRegion]['cells']: + for cellSect in self.netParams.cellParams[cellRule]['secs']: + sections.add(cellSect) + return sorted(sections) + def getAvailableStimSources(self): return list(self.netParams.stimSourceParams.keys()) + def getAvailableRxdRegions(self): + return list(self.netParams.rxdParams.regions.keys()) + + def getAvailableRxdSpecies(self): + return list(self.netParams.rxdParams.species.keys()) + def getAvailableSynMech(self): return list(self.netParams.synMechParams.keys()) @@ -524,7 +1054,10 @@ def getAvailablePlots(self): "plotShape", "plot2Dnet", "iplotConn", - "granger" + "granger", + "plotDipole", + "plotEEG", + "plotRateSpectrogram" ] return [plot for plot in plots if plot not in list(self.simConfig.analysis.keys())] @@ -569,8 +1102,10 @@ def deleteParam(self, model, label): # side effect on other rules if "popParams" in model: self.propagate_field_rename("pop", None, label) - self.propagate_field_rename("cellModel", None, rule['cellModel']) - self.propagate_field_rename("cellType", None, rule['cellType']) + if 'cellModel' in rule: + self.propagate_field_rename("cellModel", None, rule['cellModel']) + if 'cellType' in rule: + self.propagate_field_rename("cellType", None, rule['cellType']) elif "stimSourceParams" in model: @@ -578,7 +1113,8 @@ def deleteParam(self, model, label): elif "synMechParams" in model: self.propagate_field_rename("synMech", None, label) return True - except: + except Exception as e : + logging.exception(f"Error while deleting parameter: {label}") return False def validateFunction(self, functionString): @@ -587,55 +1123,24 @@ def validateFunction(self, functionString): return validateFunction(functionString, self.netParams.__dict__) def exportHLS(self, args): - def convert2bool(string): - return string.replace('true', 'True').replace('false', 'False').replace('null', 'False') - - def header(title, spacer='-'): - return '\n# ' + title.upper() + ' ' + spacer * (77 - len(title)) + '\n' try: - params = ['popParams', 'cellParams', 'synMechParams'] - params += ['connParams', 'stimSourceParams', 'stimTargetParams'] - - fname = args['fileName'] if args['fileName'][-3:] == '.py' else args['fileName'] + '.py' - - with open(fname, 'w') as script: - script.write('from netpyne import specs, sim\n') - script.write(header('documentation')) - script.write("''' Script generated with NetPyNE-UI. Please visit:\n") - script.write(" - https://www.netpyne.org\n - https://github.com/MetaCell/NetPyNE-UI\n'''\n") - script.write(header('script', spacer='=')) - script.write('netParams = specs.NetParams()\n') - script.write('simConfig = specs.SimConfig()\n') - script.write(header('single value attributes')) - for attr, value in list(self.netParams.__dict__.items()): - if attr not in params: - if value != getattr(specs.NetParams(), attr): - script.write('netParams.' + attr + ' = ') - script.write(convert2bool(json.dumps(value, indent=4)) + '\n') - - script.write(header('network attributes')) - for param in params: - for key, value in list(getattr(self.netParams, param).items()): - script.write("netParams." + param + "['" + key + "'] = ") - script.write(convert2bool(json.dumps(value, indent=4)) + '\n') - - script.write(header('network configuration')) - for attr, value in list(self.simConfig.__dict__.items()): - if value != getattr(specs.SimConfig(), attr): - script.write('simConfig.' + attr + ' = ') - script.write(convert2bool(json.dumps(value, indent=4)) + '\n') - - script.write(header('create simulate analyze network')) - script.write('# sim.createSimulateAnalyze(netParams=netParams, simConfig=simConfig)\n') - - script.write(header('end script', spacer='=')) + fname = args.get('fileName', 'output.py') + if not fname[-3:] == '.py': + fname = f"{fname}.py" + + from netpyne.conversion import createPythonScript + createPythonScript(fname, self.netParams, self.simConfig) with open(fname) as f: - return f.read() + file_b64 = base64.b64encode(bytes(f.read(), 'utf-8')).decode() + export_info = {"fileContent": file_b64, "fileName": fname} + return export_info - except: - return utils.getJSONError("Error while importing the NetPyNE model", sys.exc_info()) + except Exception: + message = "Error while exporting NetPyNE model to python" + logging.exception(message) + return utils.getJSONError(message, sys.exc_info()) def propagate(self, model, label, cond, new, old): with redirect_stdout(sys.__stdout__): @@ -644,7 +1149,7 @@ def propagate(self, model, label, cond, new, old): for plot in analysis.keys(): if cond in analysis[plot].keys(): for index, item in enumerate(analysis[plot][cond]): - if isinstance(item, str): + if isinstance(item, str) or isinstance(item, int): if item == old: if new == None: analysis[plot][cond].remove(item) @@ -662,11 +1167,11 @@ def propagate(self, model, label, cond, new, old): else: obj = getattr(self.netParams, model) for key in obj.keys(): - if label in list(obj[key][cond].keys()): + if cond in obj[key] and label in list(obj[key][cond].keys()): if isinstance(obj[key][cond][label], str): if old == obj[key][cond][label]: if new == '' or new == None: - obj[key].pop(label) + obj[key][cond].pop(label) else: obj[key][cond][label] = new elif isinstance(obj[key][cond][label], list): @@ -735,63 +1240,20 @@ def propagate_syn_mech_rename(self, new, old): if self.netParams.stimSourceParams[self.netParams.stimTargetParams[label]['source']][ 'type'] == 'NetStim': if old == self.netParams.stimTargetParams[label]['synMech']: - if new == None: + if new is None: self.netParams.stimTargetParams[label].pop('synMech') else: self.netParams.stimTargetParams[label]['synMech'] = new - def clearSim(self): - # clean up - sim.pc.barrier() - sim.pc.gid_clear() # clear previous gid settings - - # clean cells and simData in all nodes - sim.clearObj([cell.__dict__ if hasattr(cell, '__dict__') else cell for cell in sim.net.cells]) - if 'stims' in list(sim.simData.keys()): - sim.clearObj([stim for stim in sim.simData['stims']]) - - for key in list(sim.simData.keys()): del sim.simData[key] - - if hasattr(sim, 'net'): - for c in sim.net.cells: del c - for p in sim.net.pops: del p - if hasattr(sim.net, 'params'): - del sim.net.params - - # clean cells and simData gathered in master node - if sim.rank == 0: - if hasattr(sim.net, 'allCells'): - sim.clearObj([cell.__dict__ if hasattr(cell, '__dict__') else cell for cell in sim.net.allCells]) - if hasattr(sim, 'allSimData'): - if 'stims' in list(sim.allSimData.keys()): - sim.clearObj([stim for stim in sim.allSimData['stims']]) - for key in list(sim.allSimData.keys()): del sim.allSimData[key] - del sim.allSimData - - import matplotlib - matplotlib.pyplot.clf() - matplotlib.pyplot.close('all') - - if hasattr(sim, 'net'): - if hasattr(sim.net, 'allCells'): - for c in sim.net.allCells: del c - del sim.net.allCells - if hasattr(sim.net, 'allPops'): - for p in sim.net.allPops: del p - - del sim.net - - import gc; - gc.collect() - def create_celltype_from_template(self, label="CellType", conds={}, cell_template_name="Blank"): try: with redirect_stdout(sys.__stdout__): self.netParams.addCellParamsTemplate(label=label, template=cell_template_name) return True - except: - return utils.getJSONError(f"Error while creating cellType from template {cell_template_name}", - sys.exc_info()) + except Exception: + message = f"Error while creating cellType from template {cell_template_name}" + logging.exception(message) + return utils.getJSONError(message, sys.exc_info()) logging.info("Initialising NetPyNE UI") diff --git a/netpyne_ui/netpyne_model_interpreter.py b/netpyne_ui/netpyne_model_interpreter.py index d506a372..2175ab6e 100644 --- a/netpyne_ui/netpyne_model_interpreter.py +++ b/netpyne_ui/netpyne_model_interpreter.py @@ -20,8 +20,7 @@ def getGeppettoModel(self, netpyne_model): # We create a GeppettoModel instance and we set a name a assign a lib geppetto_model = self.factory.createGeppettoModel('NetPyNEModel') self.factory.geppetto_common_library = geppetto_model.libraries[0] - netpyne_geppetto_library = pygeppetto.GeppettoLibrary( - name='netpynelib') + netpyne_geppetto_library = pygeppetto.GeppettoLibrary(name='netpynelib') geppetto_model.libraries.append(netpyne_geppetto_library) self.extractPopulations(netpyne_model, netpyne_geppetto_library) @@ -34,9 +33,12 @@ def extractPopulations(self, netpyne_model, netpyne_geppetto_library): network = pygeppetto.CompositeType(id='network_netpyne', name='network_netpyne') netpyne_geppetto_library.types.append(network) + if not hasattr(netpyne_model.net, 'allCells'): + return + # Create intermediate population structure for easy access (by key) populations = {} - for index, cell in enumerate(netpyne_model.net.allCells): + for _, cell in enumerate(netpyne_model.net.allCells): # This will be only executed the first time for each population if cell['tags']['pop'] not in populations: # Create CellType, VisualType, ArrayType, ArrayVariable and append to netpyne library @@ -67,10 +69,9 @@ def extractPopulations(self, netpyne_model, netpyne_geppetto_library): populations[cell['tags']['pop']] = arrayType # Note: no need to check if pt3d since already done via netpyne sim.net.defineCellShapes() in instantiateNetPyNEModel - secs = cell['secs'] - # Iterate sections creating spheres and cylinders - if hasattr(secs, 'items'): + if 'secs' in cell and hasattr(cell['secs'], 'items'): + secs = cell['secs'] for sec_name, sec in list(secs.items()): if 'pt3d' in sec['geom']: points = sec['geom']['pt3d'] diff --git a/netpyne_ui/resources/stdin.txt b/netpyne_ui/resources/stdin.txt new file mode 100644 index 00000000..57dc54cc --- /dev/null +++ b/netpyne_ui/resources/stdin.txt @@ -0,0 +1,5 @@ +y +y +y +y +y diff --git a/netpyne_ui/simulations.py b/netpyne_ui/simulations.py new file mode 100644 index 00000000..df19464a --- /dev/null +++ b/netpyne_ui/simulations.py @@ -0,0 +1,144 @@ +import logging +import subprocess +import os +import multiprocessing +import platform + +from netpyne import sim +from netpyne_ui import constants + +# Available netpyne.batch.Batch methods. +MPI_DIRECT = "mpi_direct" +MPI_BULLETIN = "mpi_bulletin" + +system = platform.system() +if system == "Darwin": + import sys + + # nrniv needs NRN_PYLIB to be set to python executable path (MacOS, Python 3.7.6) + os.environ["NRN_PYLIB"] = sys.executable + + +class SimulationError(Exception): + """ Base Simulation Exception """ + + +class InvalidConfigError(Exception): + """ Thrown if invalid number of CPUs were specified. """ + + +class LocalSimulationPool: + """ Pool that manages simulation running on the same machine as Netpyne-UI. """ + + cpus = multiprocessing.cpu_count() + + def __init__(self): + # We allow to run only one asynchronous simulation at a time on the same instance. + self.subprocess = None + + def run(self, parallel, cores, method="", batch=False, asynchronous=False, working_directory=None): + if int(cores) > self.cpus: + raise InvalidConfigError( + f"Specified {cores} cores, but only {self.cpus} are available") + + logging.info(f"Scheduling simulation on {cores} cores with {method} ...") + + if batch or asynchronous or parallel: + if method == MPI_DIRECT: + self._run_in_subprocess( + _python_command(working_directory), asynchronous=asynchronous, working_directory=working_directory + ) + elif method == MPI_BULLETIN: + if parallel: + self._run_in_subprocess( + _bulletin_board_cmd(cores, working_directory), asynchronous=asynchronous, working_directory=working_directory + ) + else: + self._run_in_subprocess( + _python_command(working_directory), asynchronous=asynchronous, working_directory=working_directory + ) + else: + raise InvalidConfigError(f"Unsupported method {method}") + else: + return self._run_in_same_process() + + def is_running(self): + return self.subprocess and self.subprocess.poll() is None + + def list(self): + if not self.subprocess: + return "no_simulation" + + ret_code = self.subprocess.poll() + if ret_code is None: + return "running" + + status = "completed" if ret_code == 0 else "failed" + return [{"status": status}] + + def stop(self): + if self.is_running(): + self.subprocess.kill() + + def _run_in_same_process(self): + logging.debug('Running single core simulation') + + sim.setupRecording() + sim.simulate() + sim.saveData() + + def _run_in_subprocess(self, cmds, asynchronous=False, working_directory: str = None): + if self.is_running(): + logging.info("Another simulation is still running") + return False + logging.info("Running simulations on subprocess inside directory %s", working_directory) + logging.info("Running commands: \n%s", "\n".join(cmds)) + if working_directory: + with open(os.path.join(working_directory, 'sim.log'), 'w') as f: + self.subprocess = subprocess.Popen(cmds, stdout=f, stderr=f) + else: + self.subprocess = subprocess.Popen(cmds) + + if not asynchronous: + # blocking wait + return_code = self.subprocess.wait() + if return_code == 0: + logging.info("Simulation finished with success") + else: + logging.error("Simulation run failed") + + +def _bulletin_board_cmd(cores, working_directory=None): + """ Creates command to run batch or single simulations in parallel. + + Uses mpiexec that implements the OpenMPI protocol to schedule simulations. + Uses the master/worker pattern. + """ + return ["mpiexec", "-n", str(cores), "--use-hwthread-cpus", "nrniv", "-python", "-mpi", _script_path(working_directory)] + + +def _script_path(working_directory=None): + return os.path.join(working_directory, + constants.SIMULATION_SCRIPT_NAME) if working_directory else f"./{constants.SIMULATION_SCRIPT_NAME}" + + +def _python_command(working_directory=None): + return ["python", _script_path(working_directory)] + + +def run(platform="local", parallel=False, cores=1, method="", batch=False, asynchronous=False, working_directory=None): + if platform == "local": + local.run( + parallel=parallel, + cores=cores, + method=method, + batch=batch, + asynchronous=asynchronous, + working_directory=working_directory + ) + else: + # remote simulations in future versions + pass + + +local = LocalSimulationPool() diff --git a/netpyne_ui/template.py b/netpyne_ui/template.py deleted file mode 100644 index 2a370fd2..00000000 --- a/netpyne_ui/template.py +++ /dev/null @@ -1,8 +0,0 @@ -from netpyne import sim -netParams = sim.loadNetParams("./netParams.json", None, False) -simConfig = sim.loadSimCfg("./simParams.json", None, False) - -sim.createSimulateAnalyze(netParams, simConfig) - - - diff --git a/netpyne_ui/template2.py b/netpyne_ui/template2.py deleted file mode 100644 index 17360fc2..00000000 --- a/netpyne_ui/template2.py +++ /dev/null @@ -1,3 +0,0 @@ -from netpyne import sim -sim.load("./model_output.json") -sim.simulate() \ No newline at end of file diff --git a/netpyne_ui/templates/__init__.py b/netpyne_ui/templates/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/netpyne_ui/templates/batch.py b/netpyne_ui/templates/batch.py new file mode 100644 index 00000000..d3811e83 --- /dev/null +++ b/netpyne_ui/templates/batch.py @@ -0,0 +1,132 @@ +import json +import os +import sys +import tempfile +import pathlib +import time + +from neuron import h +from netpyne import specs +from netpyne.batch import Batch + +CURRENT_DIR = "." +try: + CURRENT_DIR = os.path.dirname(__file__) +except: + pass + +os.chdir(CURRENT_DIR) + +def is_error(): + """Validates if Experiment failed or succeeded. + + Experiment is successful if there exists a data file for every trial (cfg file) + """ + + data_files = list(pathlib.Path( + CURRENT_DIR).glob(f"*_data.json")) + cfg_files = list(pathlib.Path( + CURRENT_DIR).glob(f"*_cfg.json")) + + if len(data_files) != len(cfg_files): + print( + f"data files don't match with cfg files {len(data_files)} - {len(cfg_files)}") + return True + + return False + + +def update_state(experiment, state): + experiment["state"] = state + + with tempfile.NamedTemporaryFile('w', dir=os.path.dirname("experiment.json"), delete=False) as tf: + json.dump(experiment, tf, default=str, sort_keys=True, indent=4) + tempname = tf.name + + os.rename(tempname, "./experiment.json") + + +def run_batch(experiment): + # Map params to netpyne format + params = specs.ODict() + grouped_params = [] + for param in experiment["params"]: + params[param["mapsTo"].replace("netParams.", "")] = param["values"] + if param["inGroup"]: + grouped_params.append(param["mapsTo"].replace("netParams.", "")) + + with open("netParams.json", "r") as f: + net_params = json.load(f) + net_params = specs.NetParams(net_params["net"]["params"]) + + with open("simConfig.json", "r") as f: + sim_config = json.load(f) + sim_config = specs.SimConfig(sim_config["simConfig"]) + + batch = Batch( + cfg=sim_config, + netParams=net_params, + params=params, + groupedParams=grouped_params, + seed=experiment.get("seed", None), + ) + + # Label will be subfolder of saveFolder + batch.batchLabel = experiment.get("name", "batch_template_run") + + # Have to overwrite the saveFolder, default goes to root folder which is not always allowed by OS + batch.saveFolder = os.getcwd() + + # For now, we only support grid|list + batch.method = experiment.get("method", "grid") + + # for now, we only support mpi_direct or bulletinboard + # * mpi_direct can be started by running batch.py + # * mpi_bulletin requires to run "mpiexec -n 4 nrniv -mpi batch.py", otherwise runs in single core + run_cfg = experiment.get("runCfg", None) + + cores = run_cfg.get("cores", None) + cores = int(cores) if cores else None + + if run_cfg: + batch.runCfg = { + "type": run_cfg.get("type", "mpi_bulletin"), + "script": run_cfg.get("script", "run.py"), + "skip": run_cfg.get("skip", True), + "cores": cores, + } + + batch.run() + return batch + + +with open("experiment.json", "r") as f: + experiment = json.load(f) + if experiment['runCfg']['type'] == 'mpi_bulletin': + pc = h.ParallelContext() + if pc.id() == 0: + update_state(experiment, "SIMULATING") + else: + update_state(experiment, "SIMULATING") + + try: + batch = run_batch(experiment) + if batch.runCfg["type"] == "mpi_bulletin": + pc = h.ParallelContext() + if pc.id() != 0: + sys.exit(0) + + # wait for data file writing to complete ... + # TODO: netpyne sim needs to wait until file exists before exiting! + time.sleep(10) + if is_error(): + update_state(experiment, "ERROR") + sys.exit(1) + else: + update_state(experiment, "SIMULATED") + + except Exception as e: + print("Experiment failed ...") + print(e) + update_state(experiment, "ERROR") + sys.exit(1) diff --git a/netpyne_ui/templates/batch_run_single.py b/netpyne_ui/templates/batch_run_single.py new file mode 100644 index 00000000..52906dfe --- /dev/null +++ b/netpyne_ui/templates/batch_run_single.py @@ -0,0 +1,24 @@ +import neuron +from netpyne import sim + + +def run(): + # Folder that contains x86_64 folder + NETPYNE_WORKDIR_PATH = "../../../" + neuron.load_mechanisms(NETPYNE_WORKDIR_PATH) + + # read cfg and netParams from command line arguments if available; otherwise use default + simConfig, netParams = sim.readCmdLineArgs( + simConfigDefault="cfg.py", netParamsDefault="netParams.py" + ) + + # Create network and run simulation + sim.createSimulate(netParams=netParams, simConfig=simConfig) + sim.saveData() + + +try: + run() +except Exception as e: + print("Trial failed ...") + print(e) diff --git a/netpyne_ui/templates/run.py b/netpyne_ui/templates/run.py new file mode 100644 index 00000000..a89af07d --- /dev/null +++ b/netpyne_ui/templates/run.py @@ -0,0 +1,54 @@ +import os +import json +import neuron +import sys +import tempfile + +from neuron import h +from netpyne import sim + +os.chdir(os.path.dirname(__file__)) + + +def update_state(experiment, state): + experiment["state"] = state + + with tempfile.NamedTemporaryFile('w', dir=os.path.dirname("experiment.json"), delete=False) as tf: + json.dump(experiment, tf, default=str, sort_keys=True, indent=4) + tempname = tf.name + + os.rename(tempname, "./experiment.json") + + +def run_sim(): + # Folder that contains x86_64 folder + NETPYNE_WORKDIR_PATH = "../../../" + neuron.load_mechanisms(NETPYNE_WORKDIR_PATH) + + netParams = sim.loadNetParams("./netParams.json", None, False) + simConfig = sim.loadSimCfg("./simConfig.json", None, False) + + sim.createSimulate(netParams, simConfig) + sim.saveData() + + +with open("./experiment.json", "r") as f: + exp = json.load(f) + if exp['runCfg']['type'] == 'mpi_bulletin' and exp['runCfg']['cores'] > 1: + pc = h.ParallelContext() + if pc.id() == 0: + update_state(exp, "SIMULATING") + else: + update_state(exp, "SIMULATING") + +try: + run_sim() + update_state(exp, "SIMULATED") + sys.exit(0) + +except Exception as e: + print("Experiment failed ...") + print(e) + + update_state(exp, "ERROR") + sys.exit(1) diff --git a/netpyne_ui/templates/run_instantiated_net.py b/netpyne_ui/templates/run_instantiated_net.py new file mode 100644 index 00000000..a1bef0c1 --- /dev/null +++ b/netpyne_ui/templates/run_instantiated_net.py @@ -0,0 +1,11 @@ +import neuron + +from netpyne import sim + +# Folder that contains x86_64 folder +NETPYNE_WORKDIR_PATH = '../../../' +neuron.load_mechanisms(NETPYNE_WORKDIR_PATH) + +sim.load("./model_output.json") +sim.createSimulate() +sim.saveData() \ No newline at end of file diff --git a/netpyne_ui/utils.py b/netpyne_ui/utils.py new file mode 100644 index 00000000..646135f6 --- /dev/null +++ b/netpyne_ui/utils.py @@ -0,0 +1,23 @@ +import os + + +def remove(dictionary): + # remove reserved keys such as __dict__, __Method__, etc + # they appear when we do sim.loadAll(json_file) + if isinstance(dictionary, dict): + for key, value in list(dictionary.items()): + if key.startswith('__'): + dictionary.pop(key) + else: + remove(value) + + +def get_next_file_name(directory: str, filename: str) -> str: + if not os.path.exists(os.path.join(directory, filename)): + return filename + + i = 1 + while os.path.exists(os.path.join(directory, f"{filename}-{i}")): + i += 1 + + return f"{filename}-{i}" diff --git a/requirements.txt b/requirements.txt index 7d232b46..c2d7075e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -airspeed==0.5.4dev-20150515 +airspeed==0.5.20 alembic==1.4.2 async-generator==1.10 attrs==19.3.0 @@ -15,24 +15,26 @@ defusedxml==0.6.0 Deprecated==1.2.10 entrypoints==0.3 future==0.18.2 +h5py==3.7.0 idna==2.9 ipython-genutils==0.2.0 ipywidgets==7.5.1 jedi==0.17.0 Jinja2==2.11.2 +jsonpickle==2.1.0 jsonschema==3.2.0 -jupyter==1.0.0 -jupyter-client==6.1.3 -jupyter-console==6.1.0 -jupyter-core==4.6.3 -jupyter_geppetto==1.1.1 -jupyter-telemetry==0.0.5 -jupyterhub==1.1.0 -jupyterlab==2.1.3 +jupyter_geppetto==1.1.5 +jupyter-client==7.0.6 +jupyter-core==4.9.1 +jupyter-server==1.11.2 +jupyterhub==1.5.0 +jupyterlab==3.2.4 +neuromllite==0.5.4 jupyterthemes==0.20.0 kiwisolver==1.2.0 lesscpy==0.14.0 -libNeuroML==0.2.50 +libNeuroML==0.5.1 +lfpykit==0.5.1 lxml==4.5.1 Mako==1.1.0 MarkupSafe==1.1.1 @@ -42,11 +44,11 @@ mistune==0.8.4 multimethod==1.3 nbconvert==5.6.1 nbformat==5.0.6 -neuromllite==0.1.9 -netpyne==1.0.0.2 -NEURON==7.8.1.1 +netpyne==1.0.6 +NEURON==8.2.2 numpy==1.18.5 oauthlib==3.0.1 +optuna==2.10.1 ordered-set==4.0.2 pamela==1.0.0 pandas==0.23.4 @@ -62,10 +64,14 @@ pycosat==0.6.3 pycparser==2.20 pyecore==0.11.7 pygeppetto==0.8.1 +PyLEMS==0.5.9 +pyNeuroML==1.0.10 +sentry_sdk==1.5.2 +dacite==1.6.0 +h5py==3.7.0 +jsonpickle==2.1.0 Pygments==2.6.1 PyJWT==1.7.1 -PyLEMS==0.4.9.3 -pyNeuroML==0.3.15 pyOpenSSL==19.1.0 pyparsing==2.4.7 pyrsistent==0.16.0 @@ -85,11 +91,11 @@ scipy==1.4.1 Send2Trash==1.5.0 terminado==0.8.3 testpath==0.4.4 -tornado==6.0.4 +tornado==6.1.0 traitlets==4.3.3 typing-extensions==3.7.4.2 urllib3==1.25.9 webencodings==0.5.1 widgetsnbextension==3.5.1 wrapt==1.12.1 -zipp==3.1.0 +zipp==3.1.0 \ No newline at end of file diff --git a/run.py b/run.py index bd3d26d2..5da5f591 100644 --- a/run.py +++ b/run.py @@ -9,14 +9,15 @@ os.environ['JUPYTER_CONFIG_DIR'] = os.path.join(os.path.dirname(os.path.abspath(__file__)), '.jupyter-config') -settings.debug = True +settings.debug = False if __name__ == '__main__': sys.argv.append('--NotebookApp.default_url=/geppetto') sys.argv.append("--NotebookApp.token=''") sys.argv.append('--library=netpyne_ui') + sys.argv.append('--no-browser') sys.argv.append('--NotebookApp.disable_check_xsrf=True') - + app = NotebookApp.instance() app.initialize(sys.argv) app.file_to_run = '' diff --git a/setup.py b/setup.py index de9196c9..081b6c05 100644 --- a/setup.py +++ b/setup.py @@ -3,11 +3,14 @@ import os from glob import glob -#This block copies resources to the server so we avoid jupyter nbextension install --py --sys-prefix jupyter_geppetto +# This block copies resources to the server so we avoid jupyter nbextension install --py --sys-prefix jupyter_geppetto data_files = [] -data_files.append(('geppetto/src/main/webapp/build/', glob('src/jupyter_geppetto/geppetto/src/main/webapp/build/*.js'))) -data_files.append(('geppetto/src/main/webapp/build/', glob('src/jupyter_geppetto/geppetto/src/main/webapp/build/*.vm'))) -data_files.append(('geppetto/geppetto/src/main/webapp/build/', glob('src/jupyter_geppetto/geppetto/src/main/webapp/build/fonts/*'))) +data_files.append(('geppetto/src/main/webapp/build/', + glob('src/jupyter_geppetto/geppetto/src/main/webapp/build/*.js'))) +data_files.append(('geppetto/src/main/webapp/build/', + glob('src/jupyter_geppetto/geppetto/src/main/webapp/build/*.vm'))) +data_files.append(('geppetto/geppetto/src/main/webapp/build/', + glob('src/jupyter_geppetto/geppetto/src/main/webapp/build/fonts/*'))) for root, dirnames, filenames in os.walk('src/jupyter_geppetto/geppetto/src/main/webapp/js/'): for filename in fnmatch.filter(filenames, '*'): data_files.append((root[3:], [os.path.join(root, filename)])) @@ -15,7 +18,7 @@ setuptools.setup( name="netpyne_ui", - version="0.7.0", + version="1.1.0", url="https://github.com/MetaCell/NetPyNE-UI", author="MetaCell", author_email="info@metacell.us", @@ -38,7 +41,13 @@ ], install_requires=[ 'jupyter-geppetto>=1.0.0', - 'NEURON>=7.8.0' - 'netpyne>=1.0.0' + 'NEURON>=8.2.2', + 'netpyne>=1.0.6', + 'neuromllite==0.5.4', + 'pyNeuroML>=1.0.10', + 'sentry_sdk>=1.5.2', + 'dacite>=1.6.0', + 'h5py>=3.7.0', + 'jsonpickle>=2.1.0', ], ) diff --git a/tests/backend/models/gui_import_dict.py b/tests/backend/models/gui_import_dict.py new file mode 100644 index 00000000..de26e84c --- /dev/null +++ b/tests/backend/models/gui_import_dict.py @@ -0,0 +1,69 @@ +from netpyne import specs + +# Network parameters +netParams = {} # object of class NetParams to store the network parameters + +netParams['cellParams'] = {} +netParams['popParams'] = {} +netParams['stimSourceParams'] = {} +netParams['stimTargetParams'] = {} +netParams['synMechParams'] = {} +netParams['connParams'] = {} + +## Cell parameters +secs = {} # dict with section info +secs['soma'] = {'geom': {}, 'mechs': {}} +secs['soma']['geom'] = {'diam': 12, 'L': 12, 'Ra': 100.0, 'cm': 1} # soma geometry +secs['soma']['mechs']['hh'] = {'gnabar': 0.12, 'gkbar': 0.036, 'gl': 0.0003, 'el': -54.3} # soma hh mechanism + +secs['dend'] = {'geom': {}, 'mechs': {}} +secs['dend']['geom'] = {'diam': 1.0, 'L': 200.0, 'Ra': 100.0, 'cm': 1} +secs['dend']['topol'] = {'parentSec': 'soma', 'parentX': 1.0, 'childX': 0} # dend geometry +secs['dend']['mechs']['pas'] = {'g': 0.001, 'e': -70} # dend pas mechanism + +netParams['cellParams']['pyr'] = {'secs': secs} # add dict to list of cell parameters + +## Population parameters +netParams['popParams']['E'] = {'cellType': 'pyr', 'numCells': 40} + + # Stimulation parameters +netParams['stimSourceParams']['IClamp1'] = {'type': 'IClamp', 'dur': 5, 'del': 20, 'amp': 0.1} +netParams['stimTargetParams']['IClamp1->cell0'] = {'source': 'IClamp1', 'conds': {'cellList':[0]}, 'sec':'dend', 'loc':1.0} + + +# Synaptic mechanism parameters +netParams['synMechParams']['exc'] = {'mod': 'Exp2Syn', 'tau1': 0.1, 'tau2': 1.0, 'e': 0} + + +# Connectivity parameters +netParams['connParams']['E->E'] = { + 'preConds': {'pop': 'E'}, + 'postConds': {'pop': 'E'}, + 'weight': 0.005, # weight of each connection + 'probability': 0.1, + 'delay': 5, # delay min=0.2, mean=13.0, var = 1.4 + 'synMech': 'exc', + 'sec': 'dend'} + +# Simulation options +simConfig = specs.SimConfig() # object of class SimConfig to store simulation configuration + +simConfig.duration = 0.2*1e3 # Duration of the simulation, in ms +simConfig.dt = 0.1 # Internal integration timestep to use +simConfig.verbose = False # Show detailed messages +simConfig.recordTraces = {'V_soma':{'sec':'soma','loc':0.5,'var':'v'}, + 'V_dend': {'sec': 'dend', 'loc': 1.0, 'var':'v'}} # Dict with traces to record +simConfig.recordCells = [0] +simConfig.recordStep = 0.1 # Step size in ms to save data (eg. V traces, LFP, etc) +simConfig.filename = 'gui_tut1' # Set file output name +simConfig.saveJson = False # Save params, network and sim output to pickle file +simConfig.analysis['iplotTraces'] = {'include': [0], 'overlay': True} +simConfig.analysis['iplotRaster'] = {'markerSize': 5, 'showFig': True} + + +if __name__ == '__main__': + netpyne_geppetto.netParams=netParams + netpyne_geppetto.simConfig=simConfig + +#from netpyne import sim +#sim.createSimulateAnalyze(netParams, simConfig) diff --git a/tests/backend/models/hhcells_model.json b/tests/backend/models/hhcells_model.json new file mode 100644 index 00000000..a0e891b3 --- /dev/null +++ b/tests/backend/models/hhcells_model.json @@ -0,0 +1,27302 @@ +{ + "net": { + "cells": [ + { + "conns": [], + "gid": 0, + "secLists": null, + "secs": null, + "stims": [], + "tags": { + "cellLabel": 0, + "cellType": "hhcell", + "label": [ + "hhcell" + ], + "pop": "hhpop", + "x": 0, + "xnorm": 0.0, + "y": 20.0, + "ynorm": 0.2, + "z": 0, + "znorm": 0.0 + } + }, + { + "conns": [], + "gid": 1, + "secLists": null, + "secs": null, + "stims": [], + "tags": { + "cellLabel": 1, + "cellType": "hhcell", + "label": [ + "hhcell" + ], + "pop": "hhpop", + "x": 20.0, + "xnorm": 0.2, + "y": 10.0, + "ynorm": 0.1, + "z": 0, + "znorm": 0.0 + } + } + ], + "params": { + "cellParams": { + "hhcell": { + "secLists": { + "soma_group": [ + "soma" + ] + }, + "secs": { + "soma": { + "geom": { + "Ra": 34.56, + "cm": 1.6, + "pt3d": [ + [ + 0.0, + 0.0, + 0.0, + 17.841242 + ], + [ + 0.0, + 17.841242, + 0.0, + 17.841242 + ] + ] + }, + "ions": {}, + "mechs": { + "pas": { + "e": -57.0, + "g": 0.00031 + } + }, + "vinit": -70.0 + } + } + } + }, + "cellsVisualizationSpacingMultiplier": [ + 1, + 1, + 1 + ], + "connParams": {}, + "correctBorder": false, + "defaultDelay": 1, + "defaultThreshold": 10, + "defaultWeight": 1, + "defineCellShapes": false, + "mapping": { + "__dict__": {} + }, + "popParams": { + "hhpop": { + "cellType": "hhcell", + "cellsList": [ + { + "cellLabel": 0, + "x": 0, + "y": 20.0, + "z": 0 + }, + { + "cellLabel": 1, + "x": 20.0, + "y": 10.0, + "z": 0 + } + ], + "numCells": 2, + "originalFormat": "NeuroML2", + "pop": "hhpop" + } + }, + "popTagsCopiedToCells": [ + "cellModel", + "cellType" + ], + "propVelocity": 500.0, + "rotateCellsRandomly": false, + "rxdParams": {}, + "scale": 1, + "scaleConnWeight": 1, + "scaleConnWeightModels": false, + "scaleConnWeightNetStims": 1, + "shape": "cuboid", + "sizeX": 100, + "sizeY": 100, + "sizeZ": 100, + "stimSourceParams": {}, + "stimTargetParams": {}, + "subConnParams": {}, + "synMechParams": {} + }, + "pops": { + "hhpop": { + "cellGids": [ + 0, + 1 + ], + "tags": { + "cellType": "hhcell", + "cellsList": [ + { + "cellLabel": 0, + "x": 0, + "y": 20.0, + "z": 0 + }, + { + "cellLabel": 1, + "x": 20.0, + "y": 10.0, + "z": 0 + } + ], + "numCells": 2, + "originalFormat": "NeuroML2", + "pop": "hhpop" + } + } + } + }, + "netpyne_changeset": "", + "netpyne_version": "1.0.2", + "simConfig": { + "addSynMechs": true, + "allowConnsWithWeight0": true, + "allowSelfConns": false, + "analysis": { + "plot2Dnet": false, + "plotConn": false, + "plotRaster": false, + "plotSpikeHist": false, + "plotSpikePSD": false + }, + "backupCfgFile": [], + "cache_efficient": false, + "compactConnFormat": false, + "connRandomSecFromList": true, + "coreneuron": false, + "createNEURONObj": 1, + "createPyStruct": 1, + "cvode_active": false, + "cvode_atol": 0.001, + "distributeSynsUniformly": true, + "dt": 0.05, + "duration": 450.0, + "filename": "HHCellNetwork.txt", + "gatherOnlySimData": true, + "gpu": false, + "hParams": { + "celsius": 6.3, + "clamp_resist": 0.001, + "v_init": -65.0 + }, + "includeParamsLabel": true, + "invertedYCoord": true, + "oneSynPerNetcon": true, + "plotCells": [ + "all" + ], + "printPopAvgRates": false, + "printRunTime": false, + "printSynsAfterRule": false, + "pt3dRelativeToCellLocation": true, + "rand123GlobalIndex": null, + "random123": false, + "recordCells": [ + "all" + ], + "recordCellsSpikes": -1, + "recordDipole": false, + "recordDipolesHNN": false, + "recordLFP": [], + "recordStep": 0.05, + "recordStim": true, + "recordTime": true, + "recordTraces": { + "of0_hhpop_0_soma_v": { + "conds": { + "cellLabel": 0, + "pop": "hhpop" + }, + "loc": 0.5, + "sec": "soma", + "var": "v" + }, + "of0_hhpop_1_soma_v": { + "conds": { + "cellLabel": 1, + "pop": "hhpop" + }, + "loc": 0.5, + "sec": "soma", + "var": "v" + } + }, + "saveCSV": false, + "saveCellConns": false, + "saveCellSecs": false, + "saveDat": true, + "saveDataInclude": [ + "netParams", + "netCells", + "netPops", + "simConfig", + "simData" + ], + "saveDipoleCells": false, + "saveDipolePops": false, + "saveDpk": false, + "saveFileStep": 0.05, + "saveFolder": "", + "saveHDF5": false, + "saveJson": false, + "saveLFPCells": false, + "saveLFPPops": false, + "saveMat": false, + "savePickle": false, + "saveTiming": false, + "seeds": { + "conn": 0, + "loc": 0, + "stim": 123456789 + }, + "simLabel": "", + "timestampFilename": false, + "timing": true, + "tstop": 450.0, + "use_fast_imem": false, + "validateNetParams": false, + "verbose": false + }, + "simData": { + "avgRate": 0, + "of0_hhpop_0_soma_v": { + "cell_0": [ + -70.0, + -69.87527081398949, + -69.75173834873613, + -69.62939112223944, + -69.50821776266365, + -69.38820700728063, + -69.2693477014231, + -69.15162879744784, + -69.0350393537088, + -68.91956853354014, + -68.805205604249, + -68.69193993611786, + -68.57976100141663, + -68.46865837342409, + -68.35862172545872, + -68.24964082991887, + -68.14170555733222, + -68.03480587541415, + -67.92893184813535, + -67.82407363479824, + -67.72022148912238, + -67.61736575833848, + -67.51549688229127, + -67.41460539255094, + -67.31468191153297, + -67.2157171516266, + -67.11770191433152, + -67.02062708940294, + -66.92448365400477, + -66.82926267187104, + -66.73495529247519, + -66.64155275020755, + -66.54904636356056, + -66.45742753432182, + -66.36668774677494, + -66.27681856690802, + -66.18781164162972, + -66.09965869799292, + -66.01235154242568, + -65.92588205996972, + -65.8402422135262, + -65.75542404310859, + -65.67141966510292, + -65.58822127153493, + -65.50582112934441, + -65.4242115796664, + -65.3433850371193, + -65.26333398909989, + -65.18405099508502, + -65.10552868593999, + -65.02775976323366, + -64.95073699856012, + -64.87445323286671, + -64.79890137578877, + -64.72407440499043, + -64.64996536551203, + -64.57656736912364, + -64.50387359368483, + -64.43187728251051, + -64.36057174374301, + -64.28995034972999, + -64.22000653640855, + -64.15073380269494, + -64.08212570988049, + -64.01417588103298, + -63.94687800040407, + -63.880225812842156, + -63.81421312321105, + -63.74883379581409, + -63.684081753823925, + -63.6199509787176, + -63.55643550971721, + -63.493529443235865, + -63.431226932328926, + -63.36952218615059, + -63.30840946941562, + -63.24788310186629, + -63.18793745774439, + -63.12856696526835, + -63.06976610611535, + -63.01152941490842, + -62.95385147870844, + -62.89672693651099, + -62.840150478748114, + -62.78411684679479, + -62.72862083248013, + -62.67365727760335, + -62.619221073454256, + -62.56530716033848, + -62.511910527107126, + -62.45902621069106, + -62.406649295639546, + -62.35477491366343, + -62.30339824318259, + -62.25251450887784, + -62.202118981247004, + -62.1522069761654, + -62.10277385445041, + -62.0538150214303, + -62.005325926517166, + -61.957302062783945, + -61.90973896654553, + -61.86263221694389, + -61.81597743553712, + -61.769770285892534, + -61.724006473183564, + -61.67868174379059, + -61.63379188490557, + -61.589332724140455, + -61.54530012913941, + -61.50169000719471, + -61.45849830486632, + -61.41572100760514, + -61.3733541393799, + -61.33139376230754, + -61.28983597628726, + -61.24867691863795, + -61.20791276373922, + -61.1675397226758, + -61.12755404288534, + -61.08795200780968, + -61.04872993654936, + -61.00988418352149, + -60.97141113812094, + -60.93330722438471, + -60.89556890065957, + -60.85819265927286, + -60.82117502620648, + -60.78451256077398, + -60.748201855300756, + -60.71223953480731, + -60.67662225669557, + -60.6413467104382, + -60.606409617270884, + -60.571807729887595, + -60.53753783213875, + -60.503596738732284, + -60.469981294937575, + -60.436688376292246, + -60.403714888311725, + -60.371057766201645, + -60.33871397457297, + -60.306680507159854, + -60.274954386540244, + -60.243532663859106, + -60.21241241855436, + -60.181590758085406, + -60.151064817664285, + -60.120831759989386, + -60.09088877498175, + -60.06123307952386, + -60.03186191720097, + -60.00277255804491, + -59.97396229828032, + -59.94542846007336, + -59.91716839128281, + -59.88917946521355, + -59.86145908037244, + -59.8340046602265, + -59.80681365296341, + -59.779883531254384, + -59.7532117920192, + -59.72679595619358, + -59.700633568498745, + -59.67472219721324, + -59.64905943394688, + -59.62364289341691, + -59.59847021322628, + -59.5735390536441, + -59.54884709738815, + -59.52439204940949, + -59.50017163667916, + -59.476183607976886, + -59.45242573368184, + -59.428895805565425, + -59.405591636585996, + -59.3825110606856, + -59.35965193258865, + -59.3370121276025, + -59.31458954141999, + -59.292382089923855, + -59.270387708992985, + -59.2486043543106, + -59.22703000117423, + -59.205662644307495, + -59.18450029767378, + -59.16354099429158, + -59.142782786051704, + -59.122223743536196, + -59.101861955839006, + -59.081695530388366, + -59.0617225927709, + -59.041941286557375, + -59.02234977313017, + -59.0029462315124, + -58.983728858198596, + -58.96469586698716, + -58.94584548881427, + -58.9271759715895, + -58.90868558003293, + -58.89037259551389, + -58.87223531589119, + -58.85427205535494, + -58.836481144269825, + -58.81886092901994, + -58.80140977185509, + -58.784126050738564, + -58.76700815919635, + -58.75005450616785, + -58.73326351585798, + -58.716633627590696, + -58.70016329566395, + -58.683850989206015, + -58.66769519203319, + -58.65169440250889, + -58.635847133404035, + -58.62015191175887, + -58.604607278746016, + -58.58921178953489, + -58.57396401315743, + -58.558862532375045, + -58.54390594354693, + -58.52909285649959, + -58.514421894397614, + -58.49989169361571, + -58.485500903611964, + -58.47124818680231, + -58.457132218436215, + -58.4431516864735, + -58.429305291462455, + -58.41559174641902, + -58.40200977670717, + -58.38855811992044, + -58.375235525764595, + -58.362040755941415, + -58.34897258403359, + -58.33602979539074, + -58.32321118701652, + -58.31051556745678, + -58.29794175668886, + -58.285488586011866, + -58.27315489793809, + -58.26093954608539, + -58.24884139507064, + -58.23685932040423, + -58.224992208385494, + -58.21323895599925, + -58.201598470813245, + -58.190069670876625, + -58.17865148461937, + -58.1673428507527, + -58.15614271817043, + -58.14505004585124, + -58.134063802761986, + -58.12318296776179, + -58.11240652950719, + -58.10173348635809, + -58.09116284628471, + -58.08069362677532, + -58.07032485474498, + -58.060055566445044, + -58.04988480737361, + -58.0398116321868, + -58.02983510461088, + -58.019954297355255, + -58.01016829202625, + -58.00047617904178, + -57.9908770575468, + -57.98137003532954, + -57.97195422873863, + -57.962628762600936, + -57.953392770140205, + -57.94424539289652, + -57.935185780646506, + -57.9262130913243, + -57.91732649094329, + -57.908525153518575, + -57.899808260990234, + -57.89117500314725, + -57.88262457755221, + -57.874156189466746, + -57.86576905177765, + -57.8574623849237, + -57.84923541682323, + -57.84108738280233, + -57.833017525523815, + -57.82502509491681, + -57.817109348107024, + -57.80926954934772, + -57.80150496995132, + -57.79381488822167, + -57.786198589386984, + -57.77865536553338, + -57.7711845155391, + -57.76378534500932, + -57.75645716621164, + -57.749199298012144, + -57.742011065812086, + -57.7348918014852, + -57.727840843315576, + -57.7208575359362, + -57.71394123026798, + -57.70709128345946, + -57.70030705882707, + -57.693587925795924, + -57.68693325984121, + -57.68034244243017, + -57.67381486096457, + -57.66734990872381, + -57.660946984808476, + -57.65460549408453, + -57.648324847127974, + -57.642104460170074, + -57.635943755043094, + -57.629842159126554, + -57.62379910529402, + -57.61781403186037, + -57.61188638252961, + -57.60601560634316, + -57.60020115762864, + -57.59444249594913, + -57.588739086052996, + -57.58309039782407, + -57.57749590623244, + -57.571955091285616, + -57.56646743798019, + -57.561032436253974, + -57.55564958093863, + -57.55031837171266, + -57.545038313054945, + -57.539808914198645, + -57.53462968908563, + -57.52950015632126, + -57.52441983912969, + -57.51938826530951, + -57.514404967189854, + -57.50946948158698, + -57.504581349761175, + -57.49974011737411, + -57.494945334446655, + -57.49019655531702, + -57.48549333859934, + -57.48083524714264, + -57.47622184799024, + -57.47165271233945, + -57.46712741550178, + -57.46264553686341, + -57.458206659846155, + -57.45381037186868, + -57.44945626430819, + -57.44514393246246, + -57.440872975512185, + -57.43664299648375, + -57.43245360221231, + -57.42830440330529, + -57.42419501410614, + -57.42012505265851, + -57.416094140670765, + -57.412101903480796, + -57.40814797002122, + -57.404231972784864, + -57.400353547790644, + -57.39651233454969, + -57.39270797603188, + -57.388940118632625, + -57.38520841214002, + -57.381512509702276, + -57.37785206779551, + -57.37422674619177, + -57.370636207927475, + -57.367080119272025, + -57.363558149696836, + -57.36006997184459, + -57.35661526149882, + -57.35319369755376, + -57.34980496198454, + -57.34644873981755, + -57.34312471910126, + -57.33983259087714, + -57.33657204915099, + -57.333342790864485, + -57.330144515867026, + -57.3269769268878, + -57.323839729508194, + -57.320732632134394, + -57.31765534597031, + -57.31460758499071, + -57.31158906591466, + -57.30859950817917, + -57.30563863391314, + -57.302706167911495, + -57.29980183760965, + -57.29692537305815, + -57.29407650689758, + -57.291254974333725, + -57.288460513112945, + -57.28569286349781, + -57.28295176824295, + -57.28023697257117, + -57.27754822414972, + -57.274885273066886, + -57.27224787180874, + -57.26963577523614, + -57.26704874056195, + -57.26448652732845, + -57.26194889738503, + -57.25943561486602, + -57.25694644616876, + -57.25448115993192, + -57.25203952701397, + -57.249621320471896, + -57.247226315540104, + -57.24485428960951, + -57.242505022206885, + -57.24017829497432, + -57.237873891648974, + -57.23559159804293, + -57.23333120202333, + -57.23109249349262, + -57.228875264369044, + -57.2266793085673, + -57.224504421979375, + -57.22235040245559, + -57.22021704978579, + -57.21810416568076, + -57.216011553753766, + -57.213939019502334, + -57.211886370290145, + -57.20985341532914, + -57.20783996566179, + -57.205845834143524, + -57.20387083542534, + -57.20191478593658, + -57.19997750386786, + -57.19805880915418, + -57.19615852345818, + -57.19427647015357, + -57.1924124743087, + -57.19056636267033, + -57.1887379636475, + -57.186927107295574, + -57.18513362530047, + -57.18335735096302, + -57.181598119183434, + -57.17985576644599, + -57.17813013080383, + -57.1764210518639, + -57.174728370772044, + -57.17305193019825, + -57.171391574322, + -57.16974714881783, + -57.16811850084093, + -57.166505479013, + -57.16490793340811, + -57.163325715538825, + -57.16175867834238, + -57.160206676167014, + -57.15866956475842, + -57.157147201246346, + -57.155639444131324, + -57.154146153271505, + -57.15266718986964, + -57.15120241646018, + -57.149751696896494, + -57.14831489633822, + -57.14689188123872, + -57.14548251933269, + -57.14408667962383, + -57.14270423237272, + -57.14133504908472, + -57.139979002498016, + -57.138635966571854, + -57.13730581647476, + -57.13598842857296, + -57.1346836804189, + -57.13339145073986, + -57.13211161942666, + -57.13084406752253, + -57.12958867721204, + -57.12834533181013, + -57.12711391575129, + -57.12589431457881, + -57.12468641493413, + -57.12349010454634, + -57.122305272221695, + -57.12113180783331, + -57.119969602310924, + -57.11881854763075, + -57.11767853680545, + -57.11654946387417, + -57.11543122389271, + -57.11432371292376, + -57.11322682802725, + -57.11214046725076, + -57.111064529620066, + -57.109998915129744, + -57.10894352473388, + -57.10789826033687, + -57.10686302478427, + -57.10583772185381, + -57.10482225624642, + -57.103816533577394, + -57.10282046036758, + -57.101833944034745, + -57.10085689288492, + -57.09988921610391, + -57.098930823748844, + -57.0979816267398, + -57.097041536851556, + -57.09611046670535, + -57.09518832976079, + -57.09427504030781, + -57.09337051345867, + -57.09247466514013, + -57.09158741208555, + -57.09070867182722, + -57.089838362688674, + -57.08897640377708, + -57.08812271497575, + -57.08727721693668, + -57.08643983107316, + -57.08561047955249, + -57.084789085288755, + -57.083975571935625, + -57.08316986387929, + -57.08237188623143, + -57.081581564822216, + -57.080798826193465, + -57.0800235975918, + -57.079255806961854, + -57.07849538293963, + -57.07774225484581, + -57.07699635267923, + -57.07625760711035, + -57.07552594947481, + -57.07480131176707, + -57.07408362663405, + -57.073372827368914, + -57.072668847904836, + -57.071971622808874, + -57.07128108727589, + -57.070597177122515, + -57.069919828781195, + -57.06924897929428, + -57.06858456630817, + -57.06792652806752, + -57.06727480340949, + -57.06662933175808, + -57.0659900531185, + -57.06535690807156, + -57.064729837768176, + -57.06410878392391, + -57.06349368881353, + -57.06288449526564, + -57.0622811466574, + -57.06168358690921, + -57.06109176047956, + -57.060505612359826, + -57.05992508806916, + -57.05935013364943, + -57.058780695660225, + -57.05821672117386, + -57.057658157770454, + -57.057104953533106, + -57.056557057043, + -57.05601441737468, + -57.0554769840913, + -57.05494470723991, + -57.054417537346865, + -57.053895425413174, + -57.053378322909985, + -57.05286618177405, + -57.05235895440327, + -57.05185659365226, + -57.05135905282799, + -57.050866285685416, + -57.05037824642319, + -57.04989488967942, + -57.04941617052744, + -57.048942044471616, + -57.04847246744326, + -57.04800739579648, + -57.04754678630416, + -57.04709059615392, + -57.04663878294415, + -57.046191304680065, + -57.0457481197698, + -57.045309187020536, + -57.0448744656347, + -57.04444391520614, + -57.04401749571638, + -57.043595167530924, + -57.04317689139553, + -57.04276262843259, + -57.04235234013751, + -57.041945988375126, + -57.04154353537617, + -57.04114494373375, + -57.040750176399875, + -57.04035919668202, + -57.0399719682397, + -57.0395884550811, + -57.039208621559744, + -57.03883243237115, + -57.03845985254958, + -57.038090847464765, + -57.03772538281871, + -57.037363424642486, + -57.037004939293084, + -57.03664989345028, + -57.036298254113554, + -57.035949988599, + -57.035605064536306, + -57.03526344986573, + -57.03492511283514, + -57.03459002199704, + -57.03425814620567, + -57.033929454614096, + -57.03360391667134, + -57.03328150211956, + -57.032962180991206, + -57.03264592360627, + -57.0323327005695, + -57.03202248276769, + -57.031715241366946, + -57.03141094781004, + -57.031109573813715, + -57.030811091366104, + -57.03051547272409, + -57.03022269041074, + -57.02993271721274, + -57.02964552617789, + -57.029361090612575, + -57.02907938407931, + -57.02880038039424, + -57.02852405362475, + -57.02825037808703, + -57.0279793283437, + -57.027710879201436, + -57.027445005708636, + -57.02718168315309, + -57.026920887059696, + -57.026662593188185, + -57.02640677753085, + -57.02615341631034, + -57.02590248597744, + -57.02565396320885, + -57.02540782490509, + -57.025164048188266, + -57.02492261040002, + -57.02468348909937, + -57.024446662060654, + -57.02421210727146, + -57.02397980293057, + -57.02374972744594, + -57.023521859432684, + -57.02329617771111, + -57.023072661304724, + -57.02285128943829, + -57.022632041535914, + -57.02241489721911, + -57.02219983630491, + -57.02198683880399, + -57.02177588491884, + -57.02156695504187, + -57.02136002975363, + -57.02115508982099, + -57.020952116195346, + -57.02075109001087, + -57.020551992582725, + -57.02035480540536, + -57.020159510150776, + -57.01996608866682, + -57.019774522975496, + -57.01958479527131, + -57.019396887919584, + -57.01921078345487, + -57.019026464579255, + -57.018843914160826, + -57.018663115232016, + -57.01848405098807, + -57.01830670478546, + -57.01813106014035, + -57.01795710072705, + -57.01778481037653, + -57.01761417307487, + -57.0174451729618, + -57.01727779432924, + -57.017112021619795, + -57.01694783942536, + -57.01678523248566, + -57.016624185686815, + -57.01646468405998, + -57.01630671277993, + -57.01615025716366, + -57.015995302669054, + -57.01584183489352, + -57.01568983957266, + -57.01553930257892, + -57.01539020992032, + -57.0152425477391, + -57.01509630231047, + -57.01495146004132, + -57.014808007468964, + -57.014665931259884, + -57.01452521820849, + -57.01438585523589, + -57.014247829388694, + -57.014111127837765, + -57.01397573787708, + -57.01384164692252, + -57.0137088425107, + -57.01357731229782, + -57.0134470440585, + -57.01331802568468, + -57.01319024518446, + -57.01306369068099, + -57.012938350411375, + -57.012814212725594, + -57.01269126608539, + -57.01256949906322, + -57.01244890034116, + -57.01232945870991, + -57.01221116306769, + -57.01209400241925, + -57.01197796587484, + -57.011863042649175, + -57.011749222060466, + -57.0116364935294, + -57.011524846578176, + -57.01141427082951, + -57.01130475600571, + -57.01119629192766, + -57.01108886851393, + -57.01098247577981, + -57.0108771038364, + -57.01077274288966, + -57.010669383239524, + -57.01056701527901, + -57.01046562949329, + -57.010365216458844, + -57.01026576684256, + -57.01016727140086, + -57.010069720978876, + -57.00997310650956, + -57.009877419012874, + -57.009782649594925, + -57.009688789447154, + -57.00959582984552, + -57.0095037621497, + -57.00941257780224, + -57.009322268327814, + -57.009232825332404, + -57.009144240502536, + -57.00905650560449, + -57.008969612483554, + -57.00888355306326, + -57.008798319344606, + -57.008713903405365, + -57.00863029739931, + -57.00854749355549, + -57.00846548417752, + -57.00838426164285, + -57.008303818402084, + -57.00822414697823, + -57.008145239966055, + -57.008067090031375, + -57.00798968991037, + -57.00791303240891, + -57.00783711040189, + -57.00776191683257, + -57.00768744471193, + -57.007613687117974, + -57.00754063719515, + -57.00746828815366, + -57.00739663326887, + -57.00732566588065, + -57.00725537939278, + -57.00718576727233, + -57.007116823049046, + -57.00704854031475, + -57.006980912722746, + -57.00691393398724, + -57.006847597882754, + -57.00678189824352, + -57.00671682896294, + -57.00665238399301, + -57.00658855734374, + -57.00652534308263, + -57.00646273533408, + -57.006400728278884, + -57.00633931615364, + -57.00627849325028, + -57.00621825391547, + -57.00615859255014, + -57.00609950360893, + -57.00604098159968, + -57.00598302108294, + -57.00592561667143, + -57.00586876302958, + -57.005812454873, + -57.005756686968, + -57.005701454131106, + -57.00564675122858, + -57.00559257317594, + -57.00553891493748, + -57.00548577152583, + -57.005433138001436, + -57.005381009472174, + -57.005329381092835, + -57.005278248064705, + -57.00522760563511, + -57.00517744909698, + -57.00512777378841, + -57.005078575092206, + -57.005029848435484, + -57.004981589289244, + -57.00493379316793, + -57.00488645562902, + -57.00483957227263, + -57.00479313874108, + -57.004747150718494, + -57.00470160393042, + -57.004656494143404, + -57.00461181716462, + -57.00456756884147, + -57.00452374506119, + -57.00448034175049, + -57.00443735487514, + -57.004394780439625, + -57.004352614486784, + -57.0043108530974, + -57.004269492389874, + -57.00422852851984, + -57.00418795767982, + -57.00414777609886, + -57.0041079800422, + -57.004068565810904, + -57.00402952974153, + -57.00399086820578, + -57.003952577610185, + -57.00391465439573, + -57.00387709503755, + -57.00383989604462, + -57.00380305395939, + -57.00376656535749, + -57.003730426847405, + -57.00369463507016, + -57.00365918669902, + -57.00362407843914, + -57.00358930702731, + -57.00355486923163, + -57.00352076185119, + -57.00348698171582, + -57.003453525685735, + -57.0034203906513, + -57.0033875735327, + -57.00335507127968, + -57.00332288087124, + -57.00329099931537, + -57.00325942364877, + -57.00322815093657, + -57.00319717827206, + -57.003166502776416, + -57.00313612159843, + -57.003106031914264, + -57.00307623092716, + -57.00304671586719, + -57.00301748399103, + -57.00298853258165, + -57.00295985894809, + -57.002931460425216, + -57.00290333437347, + -57.002875478178616, + -57.00284788925149, + -57.00282056502778, + -57.00279350296778, + -57.002766700556144, + -57.00274015530166, + -57.00271386473702, + -57.00268782641859, + -57.00266203792618, + -57.00263649686282, + -57.00261120085454, + -57.00258614755015, + -57.00256133462101, + -57.00253675976082, + -57.002512420685434, + -57.00248831513259, + -57.00246444086174, + -57.00244079565385, + -57.00241737731115, + -57.00239418365697, + -57.00237121253553, + -57.00234846181173, + -57.00232592937095, + -57.002303613118855, + -57.00228151098123, + -57.00225962090372, + -57.00223794085172, + -57.002216468810126, + -57.00219520278316, + -57.00217414079422, + -57.002153280885636, + -57.00213262111855, + -57.00211215957269, + -57.00209189434621, + -57.00207182355551, + -57.002051945335076, + -57.00203225783728, + -57.002012759232215, + -57.00199344770755, + -57.001974321468325, + -57.00195537873681, + -57.001936617752335, + -57.001918036771116, + -57.0018996340661, + -57.00188140792681, + -57.00186335665917, + -57.00184547858537, + -57.0018277720437, + -57.00181023538837, + -57.00179286698941, + -57.00177566523247, + -57.001758628518694, + -57.00174175526457, + -57.00172504390177, + -57.00170849287703, + -57.001692100651965, + -57.00167586570297, + -57.001659786521046, + -57.00164386161168, + -57.0016280894947, + -57.00161246870413, + -57.001596997788056, + -57.00158167530851, + -57.001566499841296, + -57.0015514699759, + -57.001536584315346, + -57.00152184147605, + -57.0015072400877, + -57.001492778793136, + -57.00147845624823, + -57.00146427112174, + -57.001450222095194, + -57.001436307862775, + -57.00142252713119, + -57.001408878619564, + -57.0013953610593, + -57.001381973193986, + -57.00136871377925, + -57.001355581582665, + -57.00134257538364, + -57.001329693973275, + -57.00131693615428, + -57.001304300740856, + -57.00129178655857, + -57.00127939244426, + -57.00126711724594, + -57.00125495982265, + -57.00124291904441, + -57.00123099379205, + -57.00121918295715, + -57.00120748544193, + -57.00119590015914, + -57.001184426031955, + -57.00117306199389, + -57.001161806988684, + -57.00115065997022, + -57.00113961990242, + -57.00112868575913, + -57.00111785652405, + -57.001107131190636, + -57.001096508762004, + -57.00108598825082, + -57.00107556867924, + -57.00106524907879, + -57.00105502849029, + -57.00104490596377, + -57.00103488055836, + -57.00102495134223, + -57.00101511739249, + -57.0010053777951, + -57.00099573164479, + -57.00098617804498, + -57.00097671610769, + -57.00096734495345, + -57.00095806371125, + -57.00094887151842, + -57.00093976752056, + -57.0009307508715, + -57.00092182073315, + -57.00091297627548, + -57.000904216676425, + -57.00089554112181, + -57.00088694880525, + -57.00087843892813, + -57.00087001069948, + -57.00086166333591, + -57.000853396061565, + -57.00084520810802, + -57.00083709871422, + -57.00082906712643, + -57.00082111259814, + -57.00081323438999, + -57.00080543176972, + -57.0007977040121, + -57.00079005039886, + -57.00078247021862, + -57.00077496276681, + -57.00076752734565, + -57.00076016326403, + -57.000752869837484, + -57.0007456463881, + -57.00073849224448, + -57.00073140674167, + -57.00072438922109, + -57.00071743903048, + -57.000710555523845, + -57.000703738061375, + -57.00069698600941, + -57.00069029874036, + -57.000683675632665, + -57.00067711607073, + -57.00067061944486, + -57.00066418515121, + -57.000657812591726, + -57.000651501174104, + -57.00064525031171, + -57.00063905942355, + -57.000632927934184, + -57.00062685527372, + -57.00062084087772, + -57.00061488418716, + -57.00060898464837, + -57.00060314171303, + -57.000597354838035, + -57.00059162348552, + -57.000585947122765, + -57.000580325222174, + -57.000574757261205, + -57.000569242722335, + -57.000563781093, + -57.00055837186555, + -57.000553014537225, + -57.000547708610064, + -57.0005424535909, + -57.0005372489913, + -57.000532094327504, + -57.0005269891204, + -57.00052193289548, + -57.00051692518277, + -57.00051196551683, + -57.000507053436664, + -57.00050218848571, + -57.00049737021178, + -57.00049259816704, + -57.000487871907936, + -57.00048319099517, + -57.00047855499367, + -57.00047396347253, + -57.00046941600498, + -57.000464912168354, + -57.00046045154402, + -57.000456033717384, + -57.00045165827782, + -57.00044732481864, + -57.000443032937056, + -57.00043878223416, + -57.000434572314866, + -57.000430402787856, + -57.000426273265596, + -57.00042218336426, + -57.00041813270369, + -57.0004141209074, + -57.0004101476025, + -57.00040621241968, + -57.00040231499319, + -57.00039845496076, + -57.00039463196361, + -57.00039084564641, + -57.00038709565723, + -57.000383381647524, + -57.000379703272074, + -57.00037606018899, + -57.000372452059665, + -57.00036887854873, + -57.00036533932403, + -57.000361834056605, + -57.000358362420656, + -57.0003549240935, + -57.00035151875556, + -57.00034814609031, + -57.00034480578427, + -57.00034149752698, + -57.000338221010935, + -57.0003349759316, + -57.00033176198735, + -57.000328578879454, + -57.00032542631206, + -57.000322303992135, + -57.000319211629474, + -57.00031614893665, + -57.00031311562899, + -57.00031011142457, + -57.00030713604414, + -57.00030418921116, + -57.00030127065172, + -57.000298380094556, + -57.00029551727099, + -57.00029268191494, + -57.00028987376287, + -57.000287092553755, + -57.0002843380291, + -57.00028160993287, + -57.00027890801151, + -57.000276232013874, + -57.00027358169124, + -57.000270956797266, + -57.000268357087975, + -57.00026578232173, + -57.00026323225922, + -57.00026070666342, + -57.00025820529958, + -57.000255727935205, + -57.00025327434003, + -57.000250844286015, + -57.00024843754728, + -57.00024605390012, + -57.00024369312299, + -57.00024135499646, + -57.00023903930321, + -57.000236745828005, + -57.00023447435766, + -57.00023222468106, + -57.000229996589105, + -57.00022778987469, + -57.00022560433272, + -57.00022343976004, + -57.00022129595547, + -57.000219172719746, + -57.00021706985552, + -57.00021498716734, + -57.000212924461614, + -57.00021088154663, + -57.000208858232504, + -57.00020685433117, + -57.00020486965637, + -57.000202904023645, + -57.000200957250286, + -57.00019902915534, + -57.00019711955961, + -57.00019522828559, + -57.0001933551575, + -57.000191500001236, + -57.00018966264437, + -57.00018784291612, + -57.00018604064735, + -57.00018425567054, + -57.000182487819785, + -57.000180736930766, + -57.000179002840746, + -57.000177285388546, + -57.00017558441453, + -57.0001738997606, + -57.00017223127017, + -57.00017057878816, + -57.000168942160975, + -57.000167321236496, + -57.000165715864064, + -57.000164125894464, + -57.00016255117991, + -57.00016099157404, + -57.00015944693189, + -57.00015791710989, + -57.000156401965846, + -57.00015490135893, + -57.00015341514967, + -57.00015194319992, + -57.00015048537287, + -57.00014904153302, + -57.00014761154617, + -57.0001461952794, + -57.00014479260108, + -57.000143403380825, + -57.000142027489524, + -57.00014066479928, + -57.00013931518344, + -57.00013797851656, + -57.00013665467441, + -57.00013534353392, + -57.000134044973244, + -57.00013275887167, + -57.00013148510967, + -57.000130223568846, + -57.00012897413194, + -57.00012773668283, + -57.00012651110649, + -57.000125297289, + -57.00012409511755, + -57.00012290448039, + -57.00012172526687, + -57.000120557367374, + -57.00011940067335, + -57.00011825507729, + -57.00011712047271, + -57.000115996754154, + -57.000114883817176, + -57.000113781558326, + -57.00011268987516, + -57.0001116086662, + -57.00011053783096, + -57.00010947726991, + -57.000108426884466, + -57.000107386577, + -57.00010635625082, + -57.000105335810154, + -57.000104325160166, + -57.00010332420691, + -57.00010233285735, + -57.00010135101935, + -57.00010037860165, + -57.00009941551386, + -57.00009846166647, + -57.00009751697081, + -57.000096581339086, + -57.00009565468433, + -57.00009473692041, + -57.000093827962026, + -57.000092927724694, + -57.000092036124734, + -57.000091153079275, + -57.00009027850624, + -57.00008941232435, + -57.000088554453086, + -57.000087704812714, + -57.00008686332426, + -57.00008602990952, + -57.000085204491015, + -57.00008438699203, + -57.00008357733658, + -57.000082775449414, + -57.000081981255995, + -57.00008119468251, + -57.000080415655844, + -57.00007964410359, + -57.00007887995404, + -57.000078123136156, + -57.0000773735796, + -57.00007663121471, + -57.00007589597248, + -57.000075167784566, + -57.00007444658329, + -57.00007373230162, + -57.00007302487317, + -57.00007232423217, + -57.000071630313506, + -57.000070943052684, + -57.00007026238582, + -57.00006958824965, + -57.00006892058152, + -57.00006825931936, + -57.00006760440172, + -57.00006695576772, + -57.000066313357074, + -57.00006567711007, + -57.00006504696757, + -57.000064422871006, + -57.00006380476237, + -57.00006319258421, + -57.000062586279626, + -57.000061985792264, + -57.00006139106631, + -57.000060802046484, + -57.00006021867804, + -57.000059640906755, + -57.00005906867893, + -57.000058501941375, + -57.00005794064141, + -57.00005738472687, + -57.00005683414608, + -57.000056288847865, + -57.00005574878154, + -57.000055213896914, + -57.00005468414427, + -57.00005415947436, + -57.00005363983843, + -57.00005312518817, + -57.000052615475745, + -57.00005211065378, + -57.000051610675364, + -57.00005111549402, + -57.000050625063714, + -57.00005013933887, + -57.000049658274335, + -57.0000491818254, + -57.000048709947784, + -57.00004824259762, + -57.000047779731474, + -57.00004732130632, + -57.00004686727955, + -57.000046417608964, + -57.000045972252764, + -57.00004553116956, + -57.00004509431835, + -57.000044661658535, + -57.00004423314989, + -57.0000438087526, + -57.000043388427216, + -57.00004297213466, + -57.000042559836245, + -57.00004215149365, + -57.00004174706892, + -57.00004134652446, + -57.00004094982305, + -57.000040556927814, + -57.00004016780223, + -57.000039782410134, + -57.0000394007157, + -57.00003902268345, + -57.000038648278256, + -57.00003827746531, + -57.000037910210146, + -57.00003754647864, + -57.000037186236966, + -57.00003682945165, + -57.000036476089534, + -57.00003612611777, + -57.000035779503825, + -57.00003543621549, + -57.00003509622085, + -57.00003475948831, + -57.00003442598656, + -57.00003409568462, + -57.00003376855177, + -57.00003344455762, + -57.00003312367205, + -57.000032805865224, + -57.00003249110762, + -57.000032179369974, + -57.00003187062331, + -57.000031564838935, + -57.00003126198842, + -57.000030962043624, + -57.00003066497666, + -57.00003037075992, + -57.00003007936606, + -57.000029790768, + -57.0000295049389, + -57.00002922185221, + -57.00002894148161, + -57.00002866380104, + -57.000028388784685, + -57.000028116406995, + -57.000027846642645, + -57.00002757946656, + -57.00002731485392, + -57.00002705278011, + -57.00002679322078, + -57.000026536151815, + -57.0000262815493, + -57.000026029389595, + -57.00002577964924, + -57.00002553230504, + -57.00002528733399, + -57.00002504471333, + -57.00002480442051, + -57.00002456643319, + -57.000024330729254, + -57.00002409728679, + -57.0000238660841, + -57.000023637099694, + -57.000023410312295, + -57.00002318570082, + -57.00002296324439, + -57.00002274292233, + -57.00002252471416, + -57.000022308599604, + -57.00002209455857, + -57.00002188257116, + -57.00002167261768, + -57.0000214646786, + -57.00002125873461, + -57.00002105476656, + -57.0000208527555, + -57.000020652682636, + -57.000020454529384, + -57.000020258277324, + -57.00002006390822, + -57.00001987140399, + -57.00001968074676, + -57.0000194919188, + -57.00001930490256, + -57.00001911968065, + -57.00001893623587, + -57.00001875455116, + -57.000018574609626, + -57.00001839639455, + -57.00001821988938, + -57.00001804507769, + -57.000017871943236, + -57.00001770046993, + -57.00001753064184, + -57.000017362443174, + -57.0000171958583, + -57.00001703087173, + -57.00001686746813, + -57.00001670563232, + -57.00001654534925, + -57.000016386604024, + -57.000016229381885, + -57.00001607366822, + -57.000015919448565, + -57.00001576670858, + -57.00001561543406, + -57.00001546561095, + -57.000015317225326, + -57.0000151702634, + -57.00001502471151, + -57.00001488055612, + -57.00001473778384, + -57.0000145963814, + -57.00001445633565, + -57.00001431763357, + -57.00001418026228, + -57.00001404420901, + -57.0000139094611, + -57.00001377600604, + -57.00001364383142, + -57.000013512924966, + -57.00001338327449, + -57.00001325486796, + -57.00001312769343, + -57.000013001739084, + -57.00001287699321, + -57.00001275344422, + -57.00001263108062, + -57.00001250989105, + -57.00001238986424, + -57.00001227098903, + -57.00001215325438, + -57.00001203664934, + -57.00001192116307, + -57.00001180678484, + -57.00001169350402, + -57.000011581310076, + -57.00001147019258, + -57.000011360141215, + -57.00001125114574, + -57.00001114319603, + -57.000011036282054, + -57.00001093039386, + -57.00001082552162, + -57.000010721655585, + -57.00001061878609, + -57.000010516903586, + -57.0000104159986, + -57.000010316061754, + -57.000010217083755, + -57.0000101190554, + -57.00001002196759, + -57.00000992581129, + -57.00000983057757, + -57.000009736257574, + -57.000009642842535, + -57.000009550323774, + -57.00000945869269, + -57.00000936794076, + -57.00000927805956, + -57.000009189040725, + -57.000009100875985, + -57.00000901355715, + -57.000008927076095, + -57.000008841424794, + -57.00000875659528, + -57.00000867257966, + -57.00000858937014, + -57.00000850695898, + -57.000008425338514, + -57.00000834450116, + -57.0000082644394, + -57.0000081851458, + -57.00000810661299, + -57.00000802883366, + -57.00000795180059, + -57.00000787550662, + -57.000007799944655, + -57.00000772510767, + -57.00000765098872, + -57.0000075775809, + -57.0000075048774, + -57.00000743287146, + -57.000007361556385, + -57.000007290925545, + -57.00000722097238, + -57.000007151690376, + -57.00000708307311, + -57.000007015114186, + -57.0000069478073, + -57.0000068811462, + -57.00000681512468, + -57.000006749736606, + -57.0000066849759, + -57.000006620836544, + -57.00000655731258, + -57.0000064943981, + -57.000006432087254, + -57.00000637037425, + -57.00000630925336, + -57.0000062487189, + -57.000006188765234, + -57.0000061293868, + -57.000006070578074, + -57.00000601233359, + -57.00000595464794, + -57.000005897515756, + -57.00000584093173, + -57.0000057848906, + -57.00000572938716, + -57.00000567441626, + -57.00000561997277, + -57.00000556605164, + -57.00000551264787, + -57.00000545975647, + -57.00000540737255, + -57.000005355491226, + -57.00000530410768, + -57.00000525321714, + -57.00000520281487, + -57.000005152896186, + -57.00000510345645, + -57.00000505449107, + -57.00000500599549, + -57.0000049579652, + -57.000004910395745, + -57.0000048632827, + -57.000004816621676, + -57.000004770408346, + -57.00000472463841, + -57.000004679307615, + -57.00000463441175, + -57.00000458994664, + -57.000004545908155, + -57.0000045022922, + -57.00000445909472, + -57.0000044163117, + -57.00000437393916, + -57.00000433197317, + -57.00000429040983, + -57.000004249245265, + -57.00000420847566, + -57.00000416809722, + -57.00000412810619, + -57.000004088498855, + -57.00000404927154, + -57.00000401042059, + -57.0000039719424, + -57.00000393383339, + -57.00000389609002, + -57.00000385870878, + -57.00000382168619, + -57.00000378501882, + -57.00000374870326, + -57.000003712736124, + -57.00000367711408, + -57.000003641833814, + -57.00000360689205, + -57.000003572285536, + -57.00000353801105, + -57.00000350406542, + -57.00000347044548, + -57.0000034371481, + -57.0000034041702, + -57.00000337150871, + -57.00000333916059, + -57.00000330712284, + -57.00000327539247, + -57.000003243966546, + -57.00000321284214, + -57.00000318201636, + -57.00000315148633, + -57.00000312124923, + -57.00000309130224, + -57.00000306164258, + -57.000003032267486, + -57.000003003174236, + -57.00000297436012, + -57.000002945822466, + -57.00000291755862, + -57.00000288956595, + -57.00000286184186, + -57.000002834383764, + -57.00000280718912, + -57.00000278025539, + -57.000002753580084, + -57.00000272716071, + -57.00000270099483, + -57.00000267507999, + -57.000002649413794, + -57.00000262399385, + -57.0000025988178, + -57.00000257388331, + -57.000002549188046, + -57.00000252472973, + -57.00000250050608, + -57.00000247651484, + -57.00000245275378, + -57.00000242922071, + -57.00000240591342, + -57.000002382829756, + -57.00000235996757, + -57.00000233732474, + -57.00000231489915, + -57.00000229268873, + -57.000002270691404, + -57.00000224890513, + -57.0000022273279, + -57.000002205957685, + -57.00000218479251, + -57.0000021638304, + -57.000002143069416, + -57.000002122507624, + -57.000002102143114, + -57.00000208197399, + -57.00000206199838, + -57.000002042214426, + -57.00000202262029, + -57.000002003214156, + -57.00000198399421, + -57.00000196495867, + -57.00000194610577, + -57.00000192743376, + -57.000001908940895, + -57.00000189062546, + -57.000001872485754, + -57.00000185452009, + -57.0000018367268, + -57.00000181910423, + -57.00000180165073, + -57.0000017843647, + -57.00000176724452, + -57.0000017502886, + -57.00000173349536, + -57.000001716863245, + -57.00000170039071, + -57.000001684076224, + -57.00000166791827, + -57.00000165191534, + -57.00000163606595, + -57.00000162036863, + -57.00000160482192, + -57.00000158942437, + -57.000001574174554, + -57.00000155907105, + -57.000001544112465, + -57.00000152929739, + -57.000001514624465, + -57.000001500092324, + -57.000001485699606, + -57.00000147144498, + -57.00000145732712, + -57.00000144334472, + -57.00000142949647, + -57.00000141578109, + -57.000001402197306, + -57.00000138874385, + -57.00000137541947, + -57.00000136222294, + -57.00000134915302, + -57.0000013362085, + -57.000001323388176, + -57.000001310690855, + -57.000001298115365, + -57.00000128566053, + -57.000001273325196, + -57.00000126110821, + -57.00000124900844, + -57.00000123702476, + -57.00000122515606, + -57.00000121340124, + -57.0000012017592, + -57.00000119022886, + -57.00000117880914, + -57.00000116749899, + -57.000001156297365, + -57.00000114520321, + -57.000001134215495, + -57.000001123333206, + -57.000001112555324, + -57.000001101880855, + -57.0000010913088, + -57.00000108083818, + -57.000001070468024, + -57.00000106019736, + -57.00000105002524, + -57.00000103995072, + -57.00000102997286, + -57.00000102009073, + -57.000001010303414, + -57.000001000610006, + -57.0000009910096, + -57.00000098150131, + -57.000000972084244, + -57.00000096275753, + -57.000000953520306, + -57.000000944371706, + -57.00000093531088, + -57.00000092633699, + -57.0000009174492, + -57.00000090864668, + -57.00000089992862, + -57.000000891294206, + -57.00000088274264, + -57.00000087427312, + -57.00000086588486, + -57.00000085757708, + -57.00000084934901, + -57.000000841199885, + -57.00000083312895, + -57.00000082513545, + -57.00000081721865, + -57.0000008093778, + -57.00000080161218, + -57.00000079392107, + -57.00000078630375, + -57.00000077875952, + -57.000000771287674, + -57.00000076388751, + -57.00000075655836, + -57.00000074929952, + -57.00000074211032, + -57.00000073499011, + -57.00000072793821, + -57.00000072095396, + -57.00000071403673, + -57.00000070718587, + -57.00000070040074, + -57.00000069368071, + -57.00000068702516, + -57.00000068043346, + -57.00000067390501, + -57.00000066743919, + -57.00000066103541, + -57.00000065469307, + -57.00000064841158, + -57.00000064219036, + -57.00000063602883, + -57.00000062992642, + -57.000000623882556, + -57.00000061789668, + -57.00000061196824, + -57.00000060609668, + -57.00000060028145, + -57.00000059452202, + -57.00000058881785, + -57.0000005831684, + -57.00000057757316, + -57.0000005720316, + -57.000000566543214, + -57.000000561107484, + -57.00000055572391, + -57.00000055039199, + -57.00000054511122, + -57.00000053988112, + -57.0000005347012, + -57.00000052957098, + -57.000000524489984, + -57.000000519457735, + -57.00000051447377, + -57.00000050953762, + -57.00000050464884, + -57.00000049980696, + -57.000000495011534, + -57.00000049026212, + -57.000000485558274, + -57.00000048089956, + -57.00000047628554, + -57.00000047171579, + -57.00000046718989, + -57.00000046270741, + -57.00000045826794, + -57.00000045387107, + -57.00000044951638, + -57.00000044520347, + -57.00000044093194, + -57.0000004367014, + -57.00000043251144, + -57.00000042836169, + -57.00000042425175, + -57.000000420181244, + -57.000000416149796, + -57.00000041215702, + -57.00000040820256, + -57.00000040428604, + -57.000000400407096, + -57.00000039656537, + -57.000000392760505, + -57.00000038899214, + -57.00000038525994, + -57.00000038156354, + -57.00000037790261, + -57.0000003742768, + -57.00000037068578, + -57.00000036712922, + -57.00000036360678, + -57.000000360118136, + -57.000000356662966, + -57.00000035324094, + -57.00000034985175, + -57.000000346495085, + -57.00000034317062, + -57.00000033987805, + -57.00000033661707, + -57.00000033338738, + -57.00000033018868, + -57.00000032702067, + -57.00000032388306, + -57.00000032077554, + -57.00000031769785, + -57.000000314649675, + -57.00000031163075, + -57.00000030864079, + -57.00000030567952, + -57.00000030274666, + -57.00000029984194, + -57.00000029696509, + -57.00000029411584, + -57.00000029129393, + -57.000000288499095, + -57.000000285731076, + -57.00000028298962, + -57.000000280274456, + -57.00000027758535, + -57.000000274922044, + -57.00000027228429, + -57.000000269671844, + -57.00000026708447, + -57.00000026452191, + -57.00000026198394, + -57.000000259470326, + -57.000000256980826, + -57.00000025451521, + -57.00000025207325, + -57.00000024965472, + -57.00000024725939, + -57.00000024488705, + -57.00000024253747, + -57.000000240210426, + -57.00000023790572, + -57.00000023562312, + -57.00000023336242, + -57.000000231123416, + -57.00000022890589, + -57.00000022670964, + -57.00000022453446, + -57.00000022238015, + -57.00000022024651, + -57.000000218133344, + -57.000000216040455, + -57.000000213967645, + -57.000000211914724, + -57.0000002098815, + -57.00000020786778, + -57.00000020587338, + -57.00000020389811, + -57.0000002019418, + -57.00000020000426, + -57.00000019808531, + -57.00000019618477, + -57.000000194302466, + -57.00000019243822, + -57.00000019059186, + -57.00000018876322, + -57.00000018695212, + -57.0000001851584, + -57.000000183381886, + -57.00000018162242, + -57.000000179879834, + -57.00000017815397, + -57.00000017644466, + -57.00000017475175, + -57.00000017307508, + -57.0000001714145, + -57.000000169769855, + -57.00000016814099, + -57.000000166527755, + -57.00000016492999, + -57.000000163347565, + -57.00000016178032, + -57.00000016022811, + -57.000000158690796, + -57.00000015716823, + -57.000000155660274, + -57.000000154166784, + -57.000000152687626, + -57.00000015122266, + -57.00000014977174, + -57.00000014833475, + -57.000000146911546, + -57.00000014550199, + -57.00000014410597, + -57.00000014272334, + -57.00000014135397, + -57.000000139997745, + -57.00000013865453, + -57.0000001373242, + -57.00000013600663, + -57.00000013470171, + -57.0000001334093, + -57.0000001321293, + -57.00000013086158, + -57.00000012960602, + -57.00000012836251, + -57.000000127130924, + -57.00000012591116, + -57.00000012470309, + -57.000000123506624, + -57.00000012232163, + -57.000000121148005, + -57.00000011998564, + -57.000000118834436, + -57.00000011769427, + -57.00000011656505, + -57.00000011544666, + -57.000000114339, + -57.000000113241974, + -57.00000011215547, + -57.00000011107939, + -57.00000011001363, + -57.0000001089581, + -57.00000010791269, + -57.000000106877316, + -57.000000105851875, + -57.000000104836275, + -57.000000103830416, + -57.00000010283421, + -57.00000010184756, + -57.00000010087038, + -57.00000009990257, + -57.00000009894405, + -57.00000009799473, + -57.00000009705451, + -57.000000096123316, + -57.00000009520105, + -57.00000009428764, + -57.000000093382994, + -57.00000009248703, + -57.00000009159966, + -57.0000000907208, + -57.000000089850374, + -57.0000000889883, + -57.0000000881345, + -57.00000008728889, + -57.000000086451394, + -57.000000085621934, + -57.00000008480043, + -57.00000008398681, + -57.00000008318099, + -57.00000008238291, + -57.00000008159248, + -57.00000008080964, + -57.00000008003431, + -57.00000007926642, + -57.0000000785059, + -57.00000007775267, + -57.00000007700667, + -57.000000076267824, + -57.00000007553607, + -57.00000007481134, + -57.000000074093556, + -57.00000007338266, + -57.00000007267858, + -57.00000007198126, + -57.000000071290636, + -57.00000007060663, + -57.00000006992919, + -57.000000069258256, + -57.00000006859376, + -57.00000006793563, + -57.00000006728382, + -57.000000066638265, + -57.0000000659989, + -57.00000006536567, + -57.000000064738515, + -57.00000006411738, + -57.0000000635022, + -57.00000006289292, + -57.000000062289494, + -57.00000006169186, + -57.00000006109995, + -57.00000006051373, + -57.00000005993313, + -57.0000000593581, + -57.000000058788586, + -57.000000058224536, + -57.0000000576659, + -57.00000005711262, + -57.00000005656465, + -57.00000005602194, + -57.000000055484435, + -57.00000005495209, + -57.000000054424845, + -57.00000005390266, + -57.00000005338549, + -57.00000005287328, + -57.00000005236599, + -57.000000051863566, + -57.00000005136596, + -57.000000050873126, + -57.00000005038502, + -57.000000049901594, + -57.00000004942281, + -57.00000004894862, + -57.00000004847898, + -57.000000048013845, + -57.00000004755317, + -57.00000004709692, + -57.00000004664504, + -57.000000046197506, + -57.00000004575426, + -57.00000004531527, + -57.00000004488049, + -57.00000004444988, + -57.0000000440234, + -57.00000004360102, + -57.00000004318269, + -57.00000004276837, + -57.000000042358025, + -57.000000041951616, + -57.00000004154911, + -57.000000041150464, + -57.000000040755644, + -57.00000004036461, + -57.00000003997733, + -57.000000039593765, + -57.00000003921388, + -57.00000003883764, + -57.00000003846501, + -57.000000038095955, + -57.000000037730445, + -57.00000003736844, + -57.000000037009904, + -57.00000003665481, + -57.00000003630313, + -57.00000003595481, + -57.000000035609844, + -57.00000003526819, + -57.000000034929805, + -57.00000003459467, + -57.00000003426275, + -57.000000033934015, + -57.00000003360843, + -57.00000003328597, + -57.00000003296661, + -57.00000003265031, + -57.00000003233705, + -57.00000003202679, + -57.00000003171951, + -57.000000031415176, + -57.000000031113764, + -57.000000030815244, + -57.00000003051959, + -57.000000030226765, + -57.00000002993675, + -57.00000002964952, + -57.00000002936505, + -57.0000000290833, + -57.00000002880426, + -57.00000002852789, + -57.00000002825418, + -57.00000002798309, + -57.000000027714606, + -57.0000000274487, + -57.000000027185344, + -57.00000002692451, + -57.00000002666618, + -57.000000026410326, + -57.00000002615693, + -57.00000002590597, + -57.000000025657414, + -57.00000002541124, + -57.00000002516743, + -57.00000002492596, + -57.000000024686805, + -57.000000024449946, + -57.00000002421536, + -57.00000002398303, + -57.00000002375292, + -57.00000002352502, + -57.00000002329931, + -57.00000002307576, + -57.00000002285436, + -57.00000002263508, + -57.00000002241791, + -57.00000002220282, + -57.00000002198979, + -57.00000002177881, + -57.00000002156985, + -57.0000000213629, + -57.00000002115793, + -57.00000002095493, + -57.00000002075387, + -57.00000002055475, + -57.00000002035754, + -57.00000002016222, + -57.00000001996877, + -57.00000001977718, + -57.00000001958743, + -57.0000000193995, + -57.000000019213374, + -57.00000001902903, + -57.00000001884646, + -57.00000001866563, + -57.000000018486546, + -57.00000001830917, + -57.000000018133505, + -57.00000001795952, + -57.00000001778721, + -57.00000001761655, + -57.000000017447526, + -57.00000001728012, + -57.000000017114324, + -57.00000001695012, + -57.00000001678749, + -57.00000001662642, + -57.0000000164669, + -57.00000001630891, + -57.000000016152434, + -57.00000001599746, + -57.000000015843966, + -57.00000001569195, + -57.000000015541396, + -57.00000001539228, + -57.0000000152446, + -57.00000001509834, + -57.00000001495348, + -57.000000014810006, + -57.00000001466791, + -57.00000001452718, + -57.0000000143878, + -57.00000001424976, + -57.000000014113034, + -57.000000013977626, + -57.00000001384352, + -57.0000000137107, + -57.00000001357915, + -57.00000001344886, + -57.00000001331983, + -57.00000001319203, + -57.00000001306546, + -57.000000012940106, + -57.00000001281595, + -57.000000012692986, + -57.0000000125712, + -57.000000012450585, + -57.00000001233113, + -57.000000012212816, + -57.00000001209564, + -57.00000001197959, + -57.00000001186465, + -57.000000011750814, + -57.00000001163807, + -57.00000001152641, + -57.00000001141582, + -57.00000001130629, + -57.00000001119781, + -57.00000001109037, + -57.00000001098397, + -57.00000001087858, + -57.00000001077421, + -57.00000001067083, + -57.00000001056845, + -57.00000001046705, + -57.00000001036662, + -57.00000001026716, + -57.00000001016865, + -57.00000001007108, + -57.00000000997446, + -57.000000009878754, + -57.000000009783975, + -57.000000009690105, + -57.00000000959713, + -57.00000000950505, + -57.00000000941385, + -57.00000000932353, + -57.00000000923407, + -57.000000009145474, + -57.00000000905773, + -57.00000000897082, + -57.000000008884754, + -57.00000000879951, + -57.000000008715084, + -57.00000000863147, + -57.00000000854865, + -57.000000008466635, + -57.0000000083854, + -57.000000008304944, + -57.000000008225264, + -57.000000008146344, + -57.000000008068184, + -57.00000000799077, + -57.0000000079141, + -57.00000000783817, + -57.000000007762964, + -57.000000007688485, + -57.000000007614716, + -57.00000000754166, + -57.000000007469296, + -57.00000000739763, + -57.000000007326655, + -57.00000000725636, + -57.00000000718674, + -57.00000000711779, + -57.0000000070495, + -57.000000006981864, + -57.000000006914874, + -57.00000000684853, + -57.00000000678282, + -57.00000000671774, + -57.00000000665329, + -57.00000000658945, + -57.00000000652623, + -57.000000006463615, + -57.0000000064016, + -57.00000000634018, + -57.00000000627935, + -57.0000000062191, + -57.00000000615943, + -57.000000006100336, + -57.00000000604181, + -57.00000000598384, + -57.00000000592643, + -57.000000005869566, + -57.00000000581325, + -57.00000000575747, + -57.00000000570223, + -57.00000000564752, + -57.000000005593336, + -57.00000000553967, + -57.00000000548652, + -57.000000005433876, + -57.00000000538174, + -57.00000000533011, + -57.00000000527897, + -57.00000000522832, + -57.00000000517816, + -57.00000000512848, + -57.00000000507927, + -57.000000005030536, + -57.00000000498227, + -57.00000000493446, + -57.00000000488712, + -57.00000000484023, + -57.00000000479379, + -57.0000000047478, + -57.000000004702244, + -57.000000004657124, + -57.00000000461244, + -57.000000004568186, + -57.00000000452436, + -57.00000000448095, + -57.00000000443796, + -57.000000004395375, + -57.000000004353204, + -57.00000000431144, + -57.00000000427007, + -57.0000000042291, + -57.00000000418852, + -57.00000000414833, + -57.00000000410853, + -57.00000000406911, + -57.00000000403006, + -57.000000003991396, + -57.0000000039531, + -57.00000000391517, + -57.0000000038776, + -57.0000000038404, + -57.00000000380355, + -57.000000003767056, + -57.00000000373091, + -57.00000000369511, + -57.00000000365966, + -57.00000000362454, + -57.00000000358977, + -57.00000000355533, + -57.000000003521215, + -57.00000000348743, + -57.00000000345397, + -57.00000000342083, + -57.00000000338801, + -57.0000000033555, + -57.00000000332331, + -57.00000000329142, + -57.00000000325984, + -57.000000003228564, + -57.000000003197584, + -57.0000000031669, + -57.00000000313652, + -57.00000000310643, + -57.00000000307662, + -57.000000003047106, + -57.00000000301787, + -57.00000000298891, + -57.000000002960235, + -57.000000002931834, + -57.000000002903704, + -57.000000002875844, + -57.00000000284825, + -57.000000002820926, + -57.00000000279386, + -57.00000000276705, + -57.00000000274051, + -57.00000000271421, + -57.00000000268817, + -57.000000002662375, + -57.00000000263683, + -57.00000000261153, + -57.000000002586475, + -57.000000002561656, + -57.00000000253708, + -57.000000002512735, + -57.000000002488626, + -57.00000000246475, + -57.000000002441105, + -57.000000002417686, + -57.000000002394486, + -57.000000002371515, + -57.00000000234876, + -57.000000002326225, + -57.000000002303906, + -57.0000000022818, + -57.00000000225991, + -57.000000002238224, + -57.00000000221675, + -57.000000002195485, + -57.00000000217442, + -57.000000002153556, + -57.00000000213289, + -57.00000000211243, + -57.000000002092165, + -57.00000000207209, + -57.00000000205221, + -57.00000000203252, + -57.00000000201302, + -57.000000001993705, + -57.00000000197458, + -57.000000001955634, + -57.00000000193687, + -57.00000000191829, + -57.000000001899885, + -57.00000000188166, + -57.000000001863604, + -57.00000000184573, + -57.00000000182802, + -57.000000001810484, + -57.00000000179311, + -57.00000000177591, + -57.00000000175887, + -57.000000001741995, + -57.00000000172528, + -57.00000000170873, + -57.000000001692335, + -57.0000000016761, + -57.00000000166002, + -57.00000000164409, + -57.000000001628315, + -57.00000000161269, + -57.000000001597215, + -57.00000000158189, + -57.00000000156671, + -57.000000001551676, + -57.00000000153679, + -57.00000000152205, + -57.000000001507445, + -57.00000000149298, + -57.000000001478654, + -57.000000001464464, + -57.00000000145042, + -57.0000000014365, + -57.00000000142271, + -57.00000000140906, + -57.00000000139554, + -57.000000001382155, + -57.000000001368896, + -57.000000001355765, + -57.000000001342755, + -57.00000000132987, + -57.00000000131711, + -57.00000000130447, + -57.00000000129196, + -57.00000000127956, + -57.00000000126728, + -57.000000001255124, + -57.00000000124308, + -57.00000000123115, + -57.00000000121934, + -57.000000001207646, + -57.00000000119606, + -57.00000000118458, + -57.00000000117321, + -57.00000000116196, + -57.00000000115081, + -57.00000000113977, + -57.00000000112883, + -57.000000001118, + -57.000000001107274, + -57.00000000109665, + -57.00000000108613, + -57.000000001075705, + -57.00000000106538, + -57.000000001055156, + -57.00000000104503, + -57.000000001035005, + -57.00000000102507, + -57.00000000101524, + -57.000000001005496, + -57.00000000099585, + -57.00000000098629, + -57.000000000976826, + -57.000000000967454, + -57.000000000958174, + -57.00000000094898, + -57.00000000093988, + -57.00000000093086, + -57.00000000092193, + -57.00000000091308, + -57.00000000090432, + -57.000000000895646, + -57.000000000887056, + -57.00000000087854, + -57.000000000870116, + -57.00000000086177, + -57.0000000008535, + -57.00000000084531, + -57.000000000837204, + -57.000000000829175, + -57.00000000082122, + -57.00000000081334, + -57.000000000805535, + -57.000000000797804, + -57.00000000079015, + -57.00000000078257, + -57.00000000077506, + -57.00000000076762, + -57.00000000076025, + -57.000000000752955, + -57.00000000074573, + -57.000000000738574, + -57.00000000073149, + -57.00000000072447, + -57.00000000071752, + -57.000000000710635, + -57.000000000703814, + -57.000000000697064, + -57.00000000069038, + -57.000000000683755, + -57.0000000006772, + -57.0000000006707, + -57.000000000664265, + -57.00000000065789, + -57.00000000065158, + -57.00000000064533, + -57.00000000063914, + -57.00000000063301, + -57.00000000062693, + -57.000000000620915, + -57.00000000061496, + -57.00000000060906, + -57.00000000060322, + -57.00000000059743, + -57.0000000005917, + -57.00000000058602, + -57.0000000005804, + -57.00000000057483, + -57.000000000569315, + -57.00000000056385, + -57.000000000558444, + -57.00000000055309, + -57.00000000054778, + -57.00000000054252, + -57.00000000053731, + -57.000000000532154, + -57.000000000527045, + -57.000000000521986, + -57.00000000051698, + -57.00000000051202, + -57.00000000050711, + -57.00000000050224, + -57.00000000049742, + -57.00000000049265, + -57.00000000048792, + -57.00000000048324, + -57.0000000004786, + -57.00000000047401, + -57.00000000046946, + -57.00000000046496, + -57.000000000460496, + -57.000000000456076, + -57.0000000004517, + -57.000000000447365, + -57.00000000044307, + -57.000000000438824, + -57.00000000043461, + -57.00000000043044, + -57.00000000042631, + -57.00000000042222, + -57.00000000041817, + -57.000000000414154, + -57.00000000041018, + -57.000000000406246, + -57.000000000402345, + -57.00000000039849, + -57.000000000394664, + -57.00000000039088, + -57.000000000387125, + -57.00000000038341, + -57.00000000037973, + -57.00000000037608, + -57.000000000372474, + -57.0000000003689, + -57.00000000036536, + -57.00000000036186, + -57.00000000035838, + -57.000000000354945, + -57.00000000035154, + -57.000000000348166, + -57.000000000344826, + -57.000000000341515, + -57.00000000033824, + -57.00000000033499, + -57.00000000033178, + -57.0000000003286, + -57.00000000032544, + -57.00000000032232, + -57.00000000031923, + -57.00000000031617, + -57.000000000313136, + -57.00000000031013, + -57.00000000030715, + -57.000000000304205, + -57.000000000301284, + -57.00000000029839, + -57.00000000029553, + -57.000000000292694, + -57.00000000028989, + -57.00000000028711, + -57.00000000028435, + -57.000000000281624, + -57.00000000027892, + -57.000000000276245, + -57.000000000273594, + -57.00000000027097, + -57.00000000026837, + -57.0000000002658, + -57.00000000026325, + -57.00000000026073, + -57.000000000258225, + -57.000000000255746, + -57.000000000253294, + -57.000000000250864, + -57.000000000248455, + -57.000000000246075, + -57.000000000243716, + -57.00000000024138, + -57.00000000023906, + -57.00000000023677, + -57.00000000023449, + -57.00000000023224, + -57.00000000023001, + -57.0000000002278, + -57.00000000022561, + -57.000000000223444, + -57.0000000002213, + -57.000000000219174, + -57.00000000021707, + -57.00000000021499, + -57.00000000021293, + -57.00000000021088, + -57.00000000020886, + -57.00000000020685, + -57.00000000020487, + -57.0000000002029, + -57.000000000200956, + -57.00000000019903, + -57.00000000019712, + -57.00000000019523, + -57.00000000019335, + -57.0000000001915, + -57.00000000018966, + -57.00000000018784, + -57.000000000186034, + -57.00000000018425, + -57.00000000018248, + -57.000000000180734, + -57.000000000179, + -57.00000000017728, + -57.00000000017558, + -57.0000000001739, + -57.00000000017223, + -57.00000000017057, + -57.00000000016894, + -57.00000000016732, + -57.00000000016571, + -57.00000000016412, + -57.000000000162544, + -57.00000000016099, + -57.000000000159446, + -57.00000000015792, + -57.000000000156405, + -57.000000000154905, + -57.00000000015342, + -57.00000000015195, + -57.00000000015049, + -57.00000000014905, + -57.00000000014762, + -57.00000000014621, + -57.00000000014481, + -57.000000000143416, + -57.00000000014204, + -57.00000000014067, + -57.00000000013932, + -57.00000000013799, + -57.000000000136666, + -57.00000000013535, + -57.00000000013405, + -57.000000000132765, + -57.00000000013149, + -57.00000000013023, + -57.00000000012898, + -57.00000000012774, + -57.00000000012652, + -57.000000000125304, + -57.0000000001241, + -57.00000000012291, + -57.00000000012173, + -57.000000000120565, + -57.00000000011941, + -57.00000000011826, + -57.000000000117126, + -57.000000000116, + -57.00000000011489, + -57.000000000113786, + -57.00000000011269, + -57.00000000011161, + -57.00000000011054, + -57.00000000010948, + -57.00000000010843, + -57.00000000010739, + -57.00000000010636, + -57.00000000010534, + -57.00000000010433, + -57.00000000010333, + -57.00000000010233, + -57.00000000010135, + -57.00000000010038, + -57.00000000009941, + -57.00000000009846, + -57.000000000097515, + -57.00000000009658, + -57.00000000009565, + -57.00000000009474, + -57.00000000009383, + -57.000000000092925, + -57.00000000009204, + -57.000000000091156, + -57.00000000009028, + -57.000000000089415, + -57.000000000088555, + -57.0000000000877, + -57.000000000086864, + -57.00000000008603, + -57.00000000008521, + -57.00000000008439, + -57.00000000008358, + -57.00000000008278, + -57.00000000008198, + -57.000000000081194, + -57.00000000008041, + -57.00000000007964, + -57.00000000007887, + -57.00000000007812, + -57.00000000007737, + -57.00000000007663, + -57.0000000000759, + -57.000000000075175, + -57.00000000007445, + -57.00000000007373, + -57.00000000007302, + -57.00000000007232, + -57.00000000007162, + -57.00000000007093, + -57.00000000007025, + -57.000000000069576, + -57.00000000006891, + -57.00000000006825, + -57.000000000067594, + -57.00000000006695, + -57.00000000006631, + -57.00000000006567, + -57.000000000065036, + -57.00000000006441, + -57.00000000006379, + -57.00000000006318, + -57.00000000006258, + -57.00000000006198, + -57.000000000061384, + -57.000000000060794, + -57.00000000006021, + -57.000000000059636, + -57.00000000005906, + -57.00000000005849, + -57.00000000005793, + -57.000000000057376, + -57.00000000005683, + -57.00000000005628, + -57.00000000005574, + -57.00000000005521, + -57.000000000054676, + -57.00000000005415, + -57.00000000005363, + -57.00000000005312, + -57.00000000005261, + -57.000000000052104, + -57.00000000005161, + -57.00000000005111, + -57.00000000005062, + -57.000000000050136, + -57.00000000004965, + -57.00000000004918, + -57.00000000004871, + -57.00000000004824, + -57.00000000004778, + -57.000000000047315, + -57.00000000004686, + -57.00000000004641, + -57.000000000045965, + -57.000000000045524, + -57.00000000004509, + -57.00000000004466, + -57.00000000004423, + -57.000000000043805, + -57.000000000043386, + -57.00000000004297, + -57.000000000042554, + -57.00000000004215, + -57.000000000041744, + -57.00000000004135, + -57.00000000004095, + -57.00000000004056, + -57.00000000004017, + -57.00000000003978, + -57.0000000000394, + -57.00000000003902, + -57.000000000038646, + -57.00000000003828, + -57.00000000003791, + -57.000000000037545, + -57.00000000003718, + -57.00000000003683, + -57.00000000003647, + -57.000000000036124, + -57.000000000035776, + -57.000000000035435, + -57.000000000035094, + -57.00000000003476, + -57.000000000034426, + -57.0000000000341, + -57.00000000003377, + -57.000000000033445, + -57.000000000033126, + -57.000000000032806, + -57.00000000003249, + -57.00000000003218, + -57.000000000031875, + -57.00000000003157, + -57.000000000031264, + -57.000000000030965, + -57.00000000003067, + -57.000000000030376, + -57.000000000030084, + -57.00000000002979, + -57.00000000002951, + -57.000000000029225, + -57.00000000002895, + -57.00000000002867, + -57.00000000002839, + -57.00000000002812, + -57.00000000002785, + -57.00000000002758, + -57.00000000002732, + -57.00000000002706, + -57.000000000026795, + -57.00000000002654, + -57.00000000002628, + -57.000000000026034, + -57.000000000025786, + -57.00000000002554, + -57.000000000025295, + -57.000000000025054, + -57.00000000002481, + -57.00000000002457, + -57.000000000024336, + -57.0000000000241, + -57.00000000002387, + -57.00000000002364, + -57.00000000002341, + -57.000000000023185, + -57.000000000022965, + -57.000000000022744, + -57.000000000022524, + -57.00000000002231, + -57.0000000000221, + -57.000000000021885, + -57.00000000002167, + -57.000000000021465, + -57.00000000002126, + -57.00000000002105, + -57.000000000020854, + -57.000000000020655, + -57.00000000002046, + -57.00000000002026, + -57.000000000020066, + -57.000000000019874, + -57.00000000001968, + -57.00000000001949, + -57.000000000019305, + -57.00000000001912, + -57.000000000018936, + -57.00000000001875, + -57.000000000018574, + -57.000000000018396, + -57.00000000001822, + -57.00000000001804, + -57.00000000001787, + -57.0000000000177, + -57.00000000001753, + -57.00000000001736, + -57.000000000017195, + -57.00000000001703, + -57.00000000001687, + -57.000000000016705, + -57.00000000001654, + -57.000000000016385, + -57.00000000001623, + -57.00000000001607, + -57.000000000015916, + -57.00000000001577, + -57.00000000001562, + -57.00000000001547, + -57.00000000001532, + -57.00000000001517, + -57.00000000001503, + -57.000000000014886, + -57.000000000014744, + -57.0000000000146, + -57.00000000001446, + -57.00000000001432, + -57.00000000001418, + -57.00000000001405, + -57.00000000001391, + -57.00000000001378, + -57.00000000001364, + -57.000000000013515, + -57.00000000001339, + -57.00000000001326, + -57.00000000001313, + -57.000000000013, + -57.000000000012875, + -57.000000000012754, + -57.00000000001263, + -57.00000000001251, + -57.00000000001239, + -57.00000000001227, + -57.00000000001215, + -57.00000000001204, + -57.00000000001192, + -57.00000000001181, + -57.000000000011696, + -57.00000000001158, + -57.00000000001147, + -57.00000000001136, + -57.000000000011255, + -57.00000000001115, + -57.00000000001104, + -57.000000000010935, + -57.00000000001083, + -57.00000000001072, + -57.00000000001062, + -57.00000000001052, + -57.000000000010424, + -57.000000000010324, + -57.000000000010225, + -57.000000000010125, + -57.000000000010026, + -57.000000000009926, + -57.000000000009834, + -57.00000000000974, + -57.00000000000965, + -57.00000000000956, + -57.000000000009464, + -57.00000000000937, + -57.00000000000928, + -57.00000000000919, + -57.0000000000091, + -57.00000000000902, + -57.00000000000893, + -57.000000000008846, + -57.00000000000876, + -57.000000000008676, + -57.00000000000859, + -57.000000000008505, + -57.00000000000843, + -57.00000000000835, + -57.00000000000827, + -57.00000000000819, + -57.000000000008114, + -57.000000000008036, + -57.00000000000796, + -57.00000000000788, + -57.0000000000078, + -57.000000000007724, + -57.00000000000765, + -57.00000000000758, + -57.00000000000751, + -57.00000000000744, + -57.00000000000737, + -57.0000000000073, + -57.000000000007226, + -57.000000000007155, + -57.000000000007084, + -57.00000000000701, + -57.00000000000695, + -57.000000000006885, + -57.00000000000682, + -57.00000000000676, + -57.00000000000669, + -57.00000000000663, + -57.000000000006565, + -57.0000000000065, + -57.00000000000644, + -57.000000000006374, + -57.00000000000631, + -57.000000000006246, + -57.00000000000619, + -57.00000000000613, + -57.000000000006075, + -57.00000000000602, + -57.00000000000596, + -57.000000000005905, + -57.00000000000585, + -57.00000000000579, + -57.000000000005734, + -57.00000000000568, + -57.00000000000562, + -57.00000000000556, + -57.00000000000551, + -57.00000000000546, + -57.00000000000541, + -57.00000000000536, + -57.00000000000531, + -57.00000000000526, + -57.00000000000521, + -57.00000000000516, + -57.00000000000511, + -57.00000000000506, + -57.00000000000501, + -57.00000000000496, + -57.00000000000491, + -57.00000000000486, + -57.00000000000481, + -57.00000000000477, + -57.000000000004725, + -57.00000000000468, + -57.00000000000464, + -57.0000000000046, + -57.000000000004555, + -57.00000000000451, + -57.00000000000447, + -57.00000000000443, + -57.000000000004384, + -57.00000000000434, + -57.0000000000043, + -57.000000000004256, + -57.00000000000421, + -57.00000000000417, + -57.00000000000413, + -57.000000000004086, + -57.00000000000404, + -57.00000000000401, + -57.00000000000397, + -57.000000000003936, + -57.0000000000039, + -57.000000000003865, + -57.00000000000383, + -57.000000000003794, + -57.00000000000376, + -57.00000000000372, + -57.00000000000369, + -57.00000000000365, + -57.00000000000362, + -57.00000000000358, + -57.000000000003546, + -57.00000000000351, + -57.000000000003475, + -57.00000000000344, + -57.0000000000034, + -57.00000000000337, + -57.00000000000333, + -57.000000000003304, + -57.000000000003276, + -57.00000000000325, + -57.00000000000322, + -57.00000000000319, + -57.00000000000316, + -57.00000000000313, + -57.000000000003105, + -57.00000000000308, + -57.00000000000305, + -57.00000000000302, + -57.00000000000299, + -57.00000000000296, + -57.000000000002935, + -57.000000000002906, + -57.00000000000288, + -57.00000000000285, + -57.00000000000282, + -57.00000000000279, + -57.000000000002764, + -57.000000000002736, + -57.00000000000271, + -57.00000000000268, + -57.00000000000265, + -57.00000000000262, + -57.00000000000259, + -57.000000000002565, + -57.000000000002544, + -57.00000000000252, + -57.0000000000025, + -57.00000000000248, + -57.00000000000246, + -57.00000000000244, + -57.000000000002416, + -57.000000000002395, + -57.00000000000237, + -57.00000000000235, + -57.00000000000233, + -57.00000000000231, + -57.00000000000229, + -57.00000000000227, + -57.000000000002245, + -57.000000000002224, + -57.0000000000022, + -57.00000000000218, + -57.00000000000216, + -57.00000000000214, + -57.00000000000212, + -57.000000000002096, + -57.000000000002075, + -57.00000000000205, + -57.00000000000203, + -57.00000000000201, + -57.00000000000199, + -57.00000000000197, + -57.00000000000195, + -57.000000000001926, + -57.000000000001904, + -57.00000000000188, + -57.00000000000186, + -57.00000000000184, + -57.000000000001826, + -57.00000000000181, + -57.0000000000018, + -57.00000000000178, + -57.00000000000177, + -57.000000000001755, + -57.00000000000174, + -57.00000000000173, + -57.00000000000171, + -57.0000000000017, + -57.000000000001684, + -57.00000000000167, + -57.000000000001656, + -57.00000000000164, + -57.00000000000163, + -57.00000000000161, + -57.0000000000016, + -57.000000000001585, + -57.00000000000157, + -57.000000000001556, + -57.00000000000154, + -57.00000000000153, + -57.00000000000151, + -57.0000000000015, + -57.000000000001485, + -57.00000000000147, + -57.00000000000146, + -57.00000000000144, + -57.00000000000143, + -57.000000000001414, + -57.0000000000014, + -57.000000000001386, + -57.00000000000137, + -57.00000000000136, + -57.00000000000134, + -57.00000000000133, + -57.000000000001315, + -57.0000000000013, + -57.000000000001286, + -57.00000000000127, + -57.00000000000126, + -57.00000000000124, + -57.00000000000123, + -57.000000000001215, + -57.0000000000012, + -57.00000000000119, + -57.00000000000117, + -57.00000000000116, + -57.000000000001144, + -57.00000000000113, + -57.000000000001116, + -57.0000000000011, + -57.000000000001094, + -57.00000000000109, + -57.00000000000108, + -57.00000000000107, + -57.000000000001066, + -57.00000000000106, + -57.00000000000105, + -57.000000000001044, + -57.00000000000104, + -57.00000000000103, + -57.00000000000102, + -57.000000000001016, + -57.00000000000101, + -57.000000000001, + -57.000000000000995, + -57.00000000000099, + -57.00000000000098, + -57.00000000000097, + -57.000000000000966, + -57.00000000000096, + -57.00000000000095, + -57.000000000000945, + -57.00000000000094, + -57.00000000000093, + -57.000000000000924, + -57.00000000000092, + -57.00000000000091, + -57.0000000000009, + -57.000000000000895, + -57.00000000000089, + -57.00000000000088, + -57.000000000000874, + -57.00000000000087, + -57.00000000000086, + -57.00000000000085, + -57.000000000000846, + -57.00000000000084, + -57.00000000000083, + -57.000000000000824, + -57.00000000000082, + -57.00000000000081, + -57.0000000000008, + -57.000000000000796, + -57.00000000000079, + -57.00000000000078, + -57.000000000000774, + -57.00000000000077, + -57.00000000000076, + -57.00000000000075, + -57.000000000000746, + -57.00000000000074, + -57.00000000000073, + -57.000000000000725, + -57.00000000000072, + -57.00000000000071, + -57.0000000000007, + -57.000000000000696, + -57.00000000000069, + -57.00000000000068, + -57.000000000000675, + -57.00000000000067, + -57.00000000000066, + -57.000000000000654, + -57.00000000000065, + -57.00000000000064, + -57.00000000000063, + -57.000000000000625, + -57.00000000000062, + -57.00000000000061, + -57.000000000000604, + -57.0000000000006, + -57.00000000000059, + -57.00000000000058, + -57.000000000000576, + -57.00000000000057, + -57.00000000000056, + -57.000000000000554, + -57.00000000000055, + -57.00000000000054, + -57.00000000000053, + -57.000000000000526, + -57.00000000000052, + -57.00000000000051, + -57.000000000000504, + -57.0000000000005, + -57.00000000000049, + -57.00000000000048, + -57.000000000000476, + -57.00000000000047, + -57.00000000000046, + -57.000000000000455, + -57.00000000000045, + -57.00000000000044, + -57.00000000000043, + -57.000000000000426, + -57.00000000000042, + -57.00000000000041, + -57.000000000000405, + -57.0000000000004, + -57.00000000000039, + -57.000000000000384, + -57.00000000000038, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037 + ] + }, + "of0_hhpop_1_soma_v": { + "cell_1": [ + -70.0, + -69.87527081398949, + -69.75173834873613, + -69.62939112223944, + -69.50821776266365, + -69.38820700728063, + -69.2693477014231, + -69.15162879744784, + -69.0350393537088, + -68.91956853354014, + -68.805205604249, + -68.69193993611786, + -68.57976100141663, + -68.46865837342409, + -68.35862172545872, + -68.24964082991887, + -68.14170555733222, + -68.03480587541415, + -67.92893184813535, + -67.82407363479824, + -67.72022148912238, + -67.61736575833848, + -67.51549688229127, + -67.41460539255094, + -67.31468191153297, + -67.2157171516266, + -67.11770191433152, + -67.02062708940294, + -66.92448365400477, + -66.82926267187104, + -66.73495529247519, + -66.64155275020755, + -66.54904636356056, + -66.45742753432182, + -66.36668774677494, + -66.27681856690802, + -66.18781164162972, + -66.09965869799292, + -66.01235154242568, + -65.92588205996972, + -65.8402422135262, + -65.75542404310859, + -65.67141966510292, + -65.58822127153493, + -65.50582112934441, + -65.4242115796664, + -65.3433850371193, + -65.26333398909989, + -65.18405099508502, + -65.10552868593999, + -65.02775976323366, + -64.95073699856012, + -64.87445323286671, + -64.79890137578877, + -64.72407440499043, + -64.64996536551203, + -64.57656736912364, + -64.50387359368483, + -64.43187728251051, + -64.36057174374301, + -64.28995034972999, + -64.22000653640855, + -64.15073380269494, + -64.08212570988049, + -64.01417588103298, + -63.94687800040407, + -63.880225812842156, + -63.81421312321105, + -63.74883379581409, + -63.684081753823925, + -63.6199509787176, + -63.55643550971721, + -63.493529443235865, + -63.431226932328926, + -63.36952218615059, + -63.30840946941562, + -63.24788310186629, + -63.18793745774439, + -63.12856696526835, + -63.06976610611535, + -63.01152941490842, + -62.95385147870844, + -62.89672693651099, + -62.840150478748114, + -62.78411684679479, + -62.72862083248013, + -62.67365727760335, + -62.619221073454256, + -62.56530716033848, + -62.511910527107126, + -62.45902621069106, + -62.406649295639546, + -62.35477491366343, + -62.30339824318259, + -62.25251450887784, + -62.202118981247004, + -62.1522069761654, + -62.10277385445041, + -62.0538150214303, + -62.005325926517166, + -61.957302062783945, + -61.90973896654553, + -61.86263221694389, + -61.81597743553712, + -61.769770285892534, + -61.724006473183564, + -61.67868174379059, + -61.63379188490557, + -61.589332724140455, + -61.54530012913941, + -61.50169000719471, + -61.45849830486632, + -61.41572100760514, + -61.3733541393799, + -61.33139376230754, + -61.28983597628726, + -61.24867691863795, + -61.20791276373922, + -61.1675397226758, + -61.12755404288534, + -61.08795200780968, + -61.04872993654936, + -61.00988418352149, + -60.97141113812094, + -60.93330722438471, + -60.89556890065957, + -60.85819265927286, + -60.82117502620648, + -60.78451256077398, + -60.748201855300756, + -60.71223953480731, + -60.67662225669557, + -60.6413467104382, + -60.606409617270884, + -60.571807729887595, + -60.53753783213875, + -60.503596738732284, + -60.469981294937575, + -60.436688376292246, + -60.403714888311725, + -60.371057766201645, + -60.33871397457297, + -60.306680507159854, + -60.274954386540244, + -60.243532663859106, + -60.21241241855436, + -60.181590758085406, + -60.151064817664285, + -60.120831759989386, + -60.09088877498175, + -60.06123307952386, + -60.03186191720097, + -60.00277255804491, + -59.97396229828032, + -59.94542846007336, + -59.91716839128281, + -59.88917946521355, + -59.86145908037244, + -59.8340046602265, + -59.80681365296341, + -59.779883531254384, + -59.7532117920192, + -59.72679595619358, + -59.700633568498745, + -59.67472219721324, + -59.64905943394688, + -59.62364289341691, + -59.59847021322628, + -59.5735390536441, + -59.54884709738815, + -59.52439204940949, + -59.50017163667916, + -59.476183607976886, + -59.45242573368184, + -59.428895805565425, + -59.405591636585996, + -59.3825110606856, + -59.35965193258865, + -59.3370121276025, + -59.31458954141999, + -59.292382089923855, + -59.270387708992985, + -59.2486043543106, + -59.22703000117423, + -59.205662644307495, + -59.18450029767378, + -59.16354099429158, + -59.142782786051704, + -59.122223743536196, + -59.101861955839006, + -59.081695530388366, + -59.0617225927709, + -59.041941286557375, + -59.02234977313017, + -59.0029462315124, + -58.983728858198596, + -58.96469586698716, + -58.94584548881427, + -58.9271759715895, + -58.90868558003293, + -58.89037259551389, + -58.87223531589119, + -58.85427205535494, + -58.836481144269825, + -58.81886092901994, + -58.80140977185509, + -58.784126050738564, + -58.76700815919635, + -58.75005450616785, + -58.73326351585798, + -58.716633627590696, + -58.70016329566395, + -58.683850989206015, + -58.66769519203319, + -58.65169440250889, + -58.635847133404035, + -58.62015191175887, + -58.604607278746016, + -58.58921178953489, + -58.57396401315743, + -58.558862532375045, + -58.54390594354693, + -58.52909285649959, + -58.514421894397614, + -58.49989169361571, + -58.485500903611964, + -58.47124818680231, + -58.457132218436215, + -58.4431516864735, + -58.429305291462455, + -58.41559174641902, + -58.40200977670717, + -58.38855811992044, + -58.375235525764595, + -58.362040755941415, + -58.34897258403359, + -58.33602979539074, + -58.32321118701652, + -58.31051556745678, + -58.29794175668886, + -58.285488586011866, + -58.27315489793809, + -58.26093954608539, + -58.24884139507064, + -58.23685932040423, + -58.224992208385494, + -58.21323895599925, + -58.201598470813245, + -58.190069670876625, + -58.17865148461937, + -58.1673428507527, + -58.15614271817043, + -58.14505004585124, + -58.134063802761986, + -58.12318296776179, + -58.11240652950719, + -58.10173348635809, + -58.09116284628471, + -58.08069362677532, + -58.07032485474498, + -58.060055566445044, + -58.04988480737361, + -58.0398116321868, + -58.02983510461088, + -58.019954297355255, + -58.01016829202625, + -58.00047617904178, + -57.9908770575468, + -57.98137003532954, + -57.97195422873863, + -57.962628762600936, + -57.953392770140205, + -57.94424539289652, + -57.935185780646506, + -57.9262130913243, + -57.91732649094329, + -57.908525153518575, + -57.899808260990234, + -57.89117500314725, + -57.88262457755221, + -57.874156189466746, + -57.86576905177765, + -57.8574623849237, + -57.84923541682323, + -57.84108738280233, + -57.833017525523815, + -57.82502509491681, + -57.817109348107024, + -57.80926954934772, + -57.80150496995132, + -57.79381488822167, + -57.786198589386984, + -57.77865536553338, + -57.7711845155391, + -57.76378534500932, + -57.75645716621164, + -57.749199298012144, + -57.742011065812086, + -57.7348918014852, + -57.727840843315576, + -57.7208575359362, + -57.71394123026798, + -57.70709128345946, + -57.70030705882707, + -57.693587925795924, + -57.68693325984121, + -57.68034244243017, + -57.67381486096457, + -57.66734990872381, + -57.660946984808476, + -57.65460549408453, + -57.648324847127974, + -57.642104460170074, + -57.635943755043094, + -57.629842159126554, + -57.62379910529402, + -57.61781403186037, + -57.61188638252961, + -57.60601560634316, + -57.60020115762864, + -57.59444249594913, + -57.588739086052996, + -57.58309039782407, + -57.57749590623244, + -57.571955091285616, + -57.56646743798019, + -57.561032436253974, + -57.55564958093863, + -57.55031837171266, + -57.545038313054945, + -57.539808914198645, + -57.53462968908563, + -57.52950015632126, + -57.52441983912969, + -57.51938826530951, + -57.514404967189854, + -57.50946948158698, + -57.504581349761175, + -57.49974011737411, + -57.494945334446655, + -57.49019655531702, + -57.48549333859934, + -57.48083524714264, + -57.47622184799024, + -57.47165271233945, + -57.46712741550178, + -57.46264553686341, + -57.458206659846155, + -57.45381037186868, + -57.44945626430819, + -57.44514393246246, + -57.440872975512185, + -57.43664299648375, + -57.43245360221231, + -57.42830440330529, + -57.42419501410614, + -57.42012505265851, + -57.416094140670765, + -57.412101903480796, + -57.40814797002122, + -57.404231972784864, + -57.400353547790644, + -57.39651233454969, + -57.39270797603188, + -57.388940118632625, + -57.38520841214002, + -57.381512509702276, + -57.37785206779551, + -57.37422674619177, + -57.370636207927475, + -57.367080119272025, + -57.363558149696836, + -57.36006997184459, + -57.35661526149882, + -57.35319369755376, + -57.34980496198454, + -57.34644873981755, + -57.34312471910126, + -57.33983259087714, + -57.33657204915099, + -57.333342790864485, + -57.330144515867026, + -57.3269769268878, + -57.323839729508194, + -57.320732632134394, + -57.31765534597031, + -57.31460758499071, + -57.31158906591466, + -57.30859950817917, + -57.30563863391314, + -57.302706167911495, + -57.29980183760965, + -57.29692537305815, + -57.29407650689758, + -57.291254974333725, + -57.288460513112945, + -57.28569286349781, + -57.28295176824295, + -57.28023697257117, + -57.27754822414972, + -57.274885273066886, + -57.27224787180874, + -57.26963577523614, + -57.26704874056195, + -57.26448652732845, + -57.26194889738503, + -57.25943561486602, + -57.25694644616876, + -57.25448115993192, + -57.25203952701397, + -57.249621320471896, + -57.247226315540104, + -57.24485428960951, + -57.242505022206885, + -57.24017829497432, + -57.237873891648974, + -57.23559159804293, + -57.23333120202333, + -57.23109249349262, + -57.228875264369044, + -57.2266793085673, + -57.224504421979375, + -57.22235040245559, + -57.22021704978579, + -57.21810416568076, + -57.216011553753766, + -57.213939019502334, + -57.211886370290145, + -57.20985341532914, + -57.20783996566179, + -57.205845834143524, + -57.20387083542534, + -57.20191478593658, + -57.19997750386786, + -57.19805880915418, + -57.19615852345818, + -57.19427647015357, + -57.1924124743087, + -57.19056636267033, + -57.1887379636475, + -57.186927107295574, + -57.18513362530047, + -57.18335735096302, + -57.181598119183434, + -57.17985576644599, + -57.17813013080383, + -57.1764210518639, + -57.174728370772044, + -57.17305193019825, + -57.171391574322, + -57.16974714881783, + -57.16811850084093, + -57.166505479013, + -57.16490793340811, + -57.163325715538825, + -57.16175867834238, + -57.160206676167014, + -57.15866956475842, + -57.157147201246346, + -57.155639444131324, + -57.154146153271505, + -57.15266718986964, + -57.15120241646018, + -57.149751696896494, + -57.14831489633822, + -57.14689188123872, + -57.14548251933269, + -57.14408667962383, + -57.14270423237272, + -57.14133504908472, + -57.139979002498016, + -57.138635966571854, + -57.13730581647476, + -57.13598842857296, + -57.1346836804189, + -57.13339145073986, + -57.13211161942666, + -57.13084406752253, + -57.12958867721204, + -57.12834533181013, + -57.12711391575129, + -57.12589431457881, + -57.12468641493413, + -57.12349010454634, + -57.122305272221695, + -57.12113180783331, + -57.119969602310924, + -57.11881854763075, + -57.11767853680545, + -57.11654946387417, + -57.11543122389271, + -57.11432371292376, + -57.11322682802725, + -57.11214046725076, + -57.111064529620066, + -57.109998915129744, + -57.10894352473388, + -57.10789826033687, + -57.10686302478427, + -57.10583772185381, + -57.10482225624642, + -57.103816533577394, + -57.10282046036758, + -57.101833944034745, + -57.10085689288492, + -57.09988921610391, + -57.098930823748844, + -57.0979816267398, + -57.097041536851556, + -57.09611046670535, + -57.09518832976079, + -57.09427504030781, + -57.09337051345867, + -57.09247466514013, + -57.09158741208555, + -57.09070867182722, + -57.089838362688674, + -57.08897640377708, + -57.08812271497575, + -57.08727721693668, + -57.08643983107316, + -57.08561047955249, + -57.084789085288755, + -57.083975571935625, + -57.08316986387929, + -57.08237188623143, + -57.081581564822216, + -57.080798826193465, + -57.0800235975918, + -57.079255806961854, + -57.07849538293963, + -57.07774225484581, + -57.07699635267923, + -57.07625760711035, + -57.07552594947481, + -57.07480131176707, + -57.07408362663405, + -57.073372827368914, + -57.072668847904836, + -57.071971622808874, + -57.07128108727589, + -57.070597177122515, + -57.069919828781195, + -57.06924897929428, + -57.06858456630817, + -57.06792652806752, + -57.06727480340949, + -57.06662933175808, + -57.0659900531185, + -57.06535690807156, + -57.064729837768176, + -57.06410878392391, + -57.06349368881353, + -57.06288449526564, + -57.0622811466574, + -57.06168358690921, + -57.06109176047956, + -57.060505612359826, + -57.05992508806916, + -57.05935013364943, + -57.058780695660225, + -57.05821672117386, + -57.057658157770454, + -57.057104953533106, + -57.056557057043, + -57.05601441737468, + -57.0554769840913, + -57.05494470723991, + -57.054417537346865, + -57.053895425413174, + -57.053378322909985, + -57.05286618177405, + -57.05235895440327, + -57.05185659365226, + -57.05135905282799, + -57.050866285685416, + -57.05037824642319, + -57.04989488967942, + -57.04941617052744, + -57.048942044471616, + -57.04847246744326, + -57.04800739579648, + -57.04754678630416, + -57.04709059615392, + -57.04663878294415, + -57.046191304680065, + -57.0457481197698, + -57.045309187020536, + -57.0448744656347, + -57.04444391520614, + -57.04401749571638, + -57.043595167530924, + -57.04317689139553, + -57.04276262843259, + -57.04235234013751, + -57.041945988375126, + -57.04154353537617, + -57.04114494373375, + -57.040750176399875, + -57.04035919668202, + -57.0399719682397, + -57.0395884550811, + -57.039208621559744, + -57.03883243237115, + -57.03845985254958, + -57.038090847464765, + -57.03772538281871, + -57.037363424642486, + -57.037004939293084, + -57.03664989345028, + -57.036298254113554, + -57.035949988599, + -57.035605064536306, + -57.03526344986573, + -57.03492511283514, + -57.03459002199704, + -57.03425814620567, + -57.033929454614096, + -57.03360391667134, + -57.03328150211956, + -57.032962180991206, + -57.03264592360627, + -57.0323327005695, + -57.03202248276769, + -57.031715241366946, + -57.03141094781004, + -57.031109573813715, + -57.030811091366104, + -57.03051547272409, + -57.03022269041074, + -57.02993271721274, + -57.02964552617789, + -57.029361090612575, + -57.02907938407931, + -57.02880038039424, + -57.02852405362475, + -57.02825037808703, + -57.0279793283437, + -57.027710879201436, + -57.027445005708636, + -57.02718168315309, + -57.026920887059696, + -57.026662593188185, + -57.02640677753085, + -57.02615341631034, + -57.02590248597744, + -57.02565396320885, + -57.02540782490509, + -57.025164048188266, + -57.02492261040002, + -57.02468348909937, + -57.024446662060654, + -57.02421210727146, + -57.02397980293057, + -57.02374972744594, + -57.023521859432684, + -57.02329617771111, + -57.023072661304724, + -57.02285128943829, + -57.022632041535914, + -57.02241489721911, + -57.02219983630491, + -57.02198683880399, + -57.02177588491884, + -57.02156695504187, + -57.02136002975363, + -57.02115508982099, + -57.020952116195346, + -57.02075109001087, + -57.020551992582725, + -57.02035480540536, + -57.020159510150776, + -57.01996608866682, + -57.019774522975496, + -57.01958479527131, + -57.019396887919584, + -57.01921078345487, + -57.019026464579255, + -57.018843914160826, + -57.018663115232016, + -57.01848405098807, + -57.01830670478546, + -57.01813106014035, + -57.01795710072705, + -57.01778481037653, + -57.01761417307487, + -57.0174451729618, + -57.01727779432924, + -57.017112021619795, + -57.01694783942536, + -57.01678523248566, + -57.016624185686815, + -57.01646468405998, + -57.01630671277993, + -57.01615025716366, + -57.015995302669054, + -57.01584183489352, + -57.01568983957266, + -57.01553930257892, + -57.01539020992032, + -57.0152425477391, + -57.01509630231047, + -57.01495146004132, + -57.014808007468964, + -57.014665931259884, + -57.01452521820849, + -57.01438585523589, + -57.014247829388694, + -57.014111127837765, + -57.01397573787708, + -57.01384164692252, + -57.0137088425107, + -57.01357731229782, + -57.0134470440585, + -57.01331802568468, + -57.01319024518446, + -57.01306369068099, + -57.012938350411375, + -57.012814212725594, + -57.01269126608539, + -57.01256949906322, + -57.01244890034116, + -57.01232945870991, + -57.01221116306769, + -57.01209400241925, + -57.01197796587484, + -57.011863042649175, + -57.011749222060466, + -57.0116364935294, + -57.011524846578176, + -57.01141427082951, + -57.01130475600571, + -57.01119629192766, + -57.01108886851393, + -57.01098247577981, + -57.0108771038364, + -57.01077274288966, + -57.010669383239524, + -57.01056701527901, + -57.01046562949329, + -57.010365216458844, + -57.01026576684256, + -57.01016727140086, + -57.010069720978876, + -57.00997310650956, + -57.009877419012874, + -57.009782649594925, + -57.009688789447154, + -57.00959582984552, + -57.0095037621497, + -57.00941257780224, + -57.009322268327814, + -57.009232825332404, + -57.009144240502536, + -57.00905650560449, + -57.008969612483554, + -57.00888355306326, + -57.008798319344606, + -57.008713903405365, + -57.00863029739931, + -57.00854749355549, + -57.00846548417752, + -57.00838426164285, + -57.008303818402084, + -57.00822414697823, + -57.008145239966055, + -57.008067090031375, + -57.00798968991037, + -57.00791303240891, + -57.00783711040189, + -57.00776191683257, + -57.00768744471193, + -57.007613687117974, + -57.00754063719515, + -57.00746828815366, + -57.00739663326887, + -57.00732566588065, + -57.00725537939278, + -57.00718576727233, + -57.007116823049046, + -57.00704854031475, + -57.006980912722746, + -57.00691393398724, + -57.006847597882754, + -57.00678189824352, + -57.00671682896294, + -57.00665238399301, + -57.00658855734374, + -57.00652534308263, + -57.00646273533408, + -57.006400728278884, + -57.00633931615364, + -57.00627849325028, + -57.00621825391547, + -57.00615859255014, + -57.00609950360893, + -57.00604098159968, + -57.00598302108294, + -57.00592561667143, + -57.00586876302958, + -57.005812454873, + -57.005756686968, + -57.005701454131106, + -57.00564675122858, + -57.00559257317594, + -57.00553891493748, + -57.00548577152583, + -57.005433138001436, + -57.005381009472174, + -57.005329381092835, + -57.005278248064705, + -57.00522760563511, + -57.00517744909698, + -57.00512777378841, + -57.005078575092206, + -57.005029848435484, + -57.004981589289244, + -57.00493379316793, + -57.00488645562902, + -57.00483957227263, + -57.00479313874108, + -57.004747150718494, + -57.00470160393042, + -57.004656494143404, + -57.00461181716462, + -57.00456756884147, + -57.00452374506119, + -57.00448034175049, + -57.00443735487514, + -57.004394780439625, + -57.004352614486784, + -57.0043108530974, + -57.004269492389874, + -57.00422852851984, + -57.00418795767982, + -57.00414777609886, + -57.0041079800422, + -57.004068565810904, + -57.00402952974153, + -57.00399086820578, + -57.003952577610185, + -57.00391465439573, + -57.00387709503755, + -57.00383989604462, + -57.00380305395939, + -57.00376656535749, + -57.003730426847405, + -57.00369463507016, + -57.00365918669902, + -57.00362407843914, + -57.00358930702731, + -57.00355486923163, + -57.00352076185119, + -57.00348698171582, + -57.003453525685735, + -57.0034203906513, + -57.0033875735327, + -57.00335507127968, + -57.00332288087124, + -57.00329099931537, + -57.00325942364877, + -57.00322815093657, + -57.00319717827206, + -57.003166502776416, + -57.00313612159843, + -57.003106031914264, + -57.00307623092716, + -57.00304671586719, + -57.00301748399103, + -57.00298853258165, + -57.00295985894809, + -57.002931460425216, + -57.00290333437347, + -57.002875478178616, + -57.00284788925149, + -57.00282056502778, + -57.00279350296778, + -57.002766700556144, + -57.00274015530166, + -57.00271386473702, + -57.00268782641859, + -57.00266203792618, + -57.00263649686282, + -57.00261120085454, + -57.00258614755015, + -57.00256133462101, + -57.00253675976082, + -57.002512420685434, + -57.00248831513259, + -57.00246444086174, + -57.00244079565385, + -57.00241737731115, + -57.00239418365697, + -57.00237121253553, + -57.00234846181173, + -57.00232592937095, + -57.002303613118855, + -57.00228151098123, + -57.00225962090372, + -57.00223794085172, + -57.002216468810126, + -57.00219520278316, + -57.00217414079422, + -57.002153280885636, + -57.00213262111855, + -57.00211215957269, + -57.00209189434621, + -57.00207182355551, + -57.002051945335076, + -57.00203225783728, + -57.002012759232215, + -57.00199344770755, + -57.001974321468325, + -57.00195537873681, + -57.001936617752335, + -57.001918036771116, + -57.0018996340661, + -57.00188140792681, + -57.00186335665917, + -57.00184547858537, + -57.0018277720437, + -57.00181023538837, + -57.00179286698941, + -57.00177566523247, + -57.001758628518694, + -57.00174175526457, + -57.00172504390177, + -57.00170849287703, + -57.001692100651965, + -57.00167586570297, + -57.001659786521046, + -57.00164386161168, + -57.0016280894947, + -57.00161246870413, + -57.001596997788056, + -57.00158167530851, + -57.001566499841296, + -57.0015514699759, + -57.001536584315346, + -57.00152184147605, + -57.0015072400877, + -57.001492778793136, + -57.00147845624823, + -57.00146427112174, + -57.001450222095194, + -57.001436307862775, + -57.00142252713119, + -57.001408878619564, + -57.0013953610593, + -57.001381973193986, + -57.00136871377925, + -57.001355581582665, + -57.00134257538364, + -57.001329693973275, + -57.00131693615428, + -57.001304300740856, + -57.00129178655857, + -57.00127939244426, + -57.00126711724594, + -57.00125495982265, + -57.00124291904441, + -57.00123099379205, + -57.00121918295715, + -57.00120748544193, + -57.00119590015914, + -57.001184426031955, + -57.00117306199389, + -57.001161806988684, + -57.00115065997022, + -57.00113961990242, + -57.00112868575913, + -57.00111785652405, + -57.001107131190636, + -57.001096508762004, + -57.00108598825082, + -57.00107556867924, + -57.00106524907879, + -57.00105502849029, + -57.00104490596377, + -57.00103488055836, + -57.00102495134223, + -57.00101511739249, + -57.0010053777951, + -57.00099573164479, + -57.00098617804498, + -57.00097671610769, + -57.00096734495345, + -57.00095806371125, + -57.00094887151842, + -57.00093976752056, + -57.0009307508715, + -57.00092182073315, + -57.00091297627548, + -57.000904216676425, + -57.00089554112181, + -57.00088694880525, + -57.00087843892813, + -57.00087001069948, + -57.00086166333591, + -57.000853396061565, + -57.00084520810802, + -57.00083709871422, + -57.00082906712643, + -57.00082111259814, + -57.00081323438999, + -57.00080543176972, + -57.0007977040121, + -57.00079005039886, + -57.00078247021862, + -57.00077496276681, + -57.00076752734565, + -57.00076016326403, + -57.000752869837484, + -57.0007456463881, + -57.00073849224448, + -57.00073140674167, + -57.00072438922109, + -57.00071743903048, + -57.000710555523845, + -57.000703738061375, + -57.00069698600941, + -57.00069029874036, + -57.000683675632665, + -57.00067711607073, + -57.00067061944486, + -57.00066418515121, + -57.000657812591726, + -57.000651501174104, + -57.00064525031171, + -57.00063905942355, + -57.000632927934184, + -57.00062685527372, + -57.00062084087772, + -57.00061488418716, + -57.00060898464837, + -57.00060314171303, + -57.000597354838035, + -57.00059162348552, + -57.000585947122765, + -57.000580325222174, + -57.000574757261205, + -57.000569242722335, + -57.000563781093, + -57.00055837186555, + -57.000553014537225, + -57.000547708610064, + -57.0005424535909, + -57.0005372489913, + -57.000532094327504, + -57.0005269891204, + -57.00052193289548, + -57.00051692518277, + -57.00051196551683, + -57.000507053436664, + -57.00050218848571, + -57.00049737021178, + -57.00049259816704, + -57.000487871907936, + -57.00048319099517, + -57.00047855499367, + -57.00047396347253, + -57.00046941600498, + -57.000464912168354, + -57.00046045154402, + -57.000456033717384, + -57.00045165827782, + -57.00044732481864, + -57.000443032937056, + -57.00043878223416, + -57.000434572314866, + -57.000430402787856, + -57.000426273265596, + -57.00042218336426, + -57.00041813270369, + -57.0004141209074, + -57.0004101476025, + -57.00040621241968, + -57.00040231499319, + -57.00039845496076, + -57.00039463196361, + -57.00039084564641, + -57.00038709565723, + -57.000383381647524, + -57.000379703272074, + -57.00037606018899, + -57.000372452059665, + -57.00036887854873, + -57.00036533932403, + -57.000361834056605, + -57.000358362420656, + -57.0003549240935, + -57.00035151875556, + -57.00034814609031, + -57.00034480578427, + -57.00034149752698, + -57.000338221010935, + -57.0003349759316, + -57.00033176198735, + -57.000328578879454, + -57.00032542631206, + -57.000322303992135, + -57.000319211629474, + -57.00031614893665, + -57.00031311562899, + -57.00031011142457, + -57.00030713604414, + -57.00030418921116, + -57.00030127065172, + -57.000298380094556, + -57.00029551727099, + -57.00029268191494, + -57.00028987376287, + -57.000287092553755, + -57.0002843380291, + -57.00028160993287, + -57.00027890801151, + -57.000276232013874, + -57.00027358169124, + -57.000270956797266, + -57.000268357087975, + -57.00026578232173, + -57.00026323225922, + -57.00026070666342, + -57.00025820529958, + -57.000255727935205, + -57.00025327434003, + -57.000250844286015, + -57.00024843754728, + -57.00024605390012, + -57.00024369312299, + -57.00024135499646, + -57.00023903930321, + -57.000236745828005, + -57.00023447435766, + -57.00023222468106, + -57.000229996589105, + -57.00022778987469, + -57.00022560433272, + -57.00022343976004, + -57.00022129595547, + -57.000219172719746, + -57.00021706985552, + -57.00021498716734, + -57.000212924461614, + -57.00021088154663, + -57.000208858232504, + -57.00020685433117, + -57.00020486965637, + -57.000202904023645, + -57.000200957250286, + -57.00019902915534, + -57.00019711955961, + -57.00019522828559, + -57.0001933551575, + -57.000191500001236, + -57.00018966264437, + -57.00018784291612, + -57.00018604064735, + -57.00018425567054, + -57.000182487819785, + -57.000180736930766, + -57.000179002840746, + -57.000177285388546, + -57.00017558441453, + -57.0001738997606, + -57.00017223127017, + -57.00017057878816, + -57.000168942160975, + -57.000167321236496, + -57.000165715864064, + -57.000164125894464, + -57.00016255117991, + -57.00016099157404, + -57.00015944693189, + -57.00015791710989, + -57.000156401965846, + -57.00015490135893, + -57.00015341514967, + -57.00015194319992, + -57.00015048537287, + -57.00014904153302, + -57.00014761154617, + -57.0001461952794, + -57.00014479260108, + -57.000143403380825, + -57.000142027489524, + -57.00014066479928, + -57.00013931518344, + -57.00013797851656, + -57.00013665467441, + -57.00013534353392, + -57.000134044973244, + -57.00013275887167, + -57.00013148510967, + -57.000130223568846, + -57.00012897413194, + -57.00012773668283, + -57.00012651110649, + -57.000125297289, + -57.00012409511755, + -57.00012290448039, + -57.00012172526687, + -57.000120557367374, + -57.00011940067335, + -57.00011825507729, + -57.00011712047271, + -57.000115996754154, + -57.000114883817176, + -57.000113781558326, + -57.00011268987516, + -57.0001116086662, + -57.00011053783096, + -57.00010947726991, + -57.000108426884466, + -57.000107386577, + -57.00010635625082, + -57.000105335810154, + -57.000104325160166, + -57.00010332420691, + -57.00010233285735, + -57.00010135101935, + -57.00010037860165, + -57.00009941551386, + -57.00009846166647, + -57.00009751697081, + -57.000096581339086, + -57.00009565468433, + -57.00009473692041, + -57.000093827962026, + -57.000092927724694, + -57.000092036124734, + -57.000091153079275, + -57.00009027850624, + -57.00008941232435, + -57.000088554453086, + -57.000087704812714, + -57.00008686332426, + -57.00008602990952, + -57.000085204491015, + -57.00008438699203, + -57.00008357733658, + -57.000082775449414, + -57.000081981255995, + -57.00008119468251, + -57.000080415655844, + -57.00007964410359, + -57.00007887995404, + -57.000078123136156, + -57.0000773735796, + -57.00007663121471, + -57.00007589597248, + -57.000075167784566, + -57.00007444658329, + -57.00007373230162, + -57.00007302487317, + -57.00007232423217, + -57.000071630313506, + -57.000070943052684, + -57.00007026238582, + -57.00006958824965, + -57.00006892058152, + -57.00006825931936, + -57.00006760440172, + -57.00006695576772, + -57.000066313357074, + -57.00006567711007, + -57.00006504696757, + -57.000064422871006, + -57.00006380476237, + -57.00006319258421, + -57.000062586279626, + -57.000061985792264, + -57.00006139106631, + -57.000060802046484, + -57.00006021867804, + -57.000059640906755, + -57.00005906867893, + -57.000058501941375, + -57.00005794064141, + -57.00005738472687, + -57.00005683414608, + -57.000056288847865, + -57.00005574878154, + -57.000055213896914, + -57.00005468414427, + -57.00005415947436, + -57.00005363983843, + -57.00005312518817, + -57.000052615475745, + -57.00005211065378, + -57.000051610675364, + -57.00005111549402, + -57.000050625063714, + -57.00005013933887, + -57.000049658274335, + -57.0000491818254, + -57.000048709947784, + -57.00004824259762, + -57.000047779731474, + -57.00004732130632, + -57.00004686727955, + -57.000046417608964, + -57.000045972252764, + -57.00004553116956, + -57.00004509431835, + -57.000044661658535, + -57.00004423314989, + -57.0000438087526, + -57.000043388427216, + -57.00004297213466, + -57.000042559836245, + -57.00004215149365, + -57.00004174706892, + -57.00004134652446, + -57.00004094982305, + -57.000040556927814, + -57.00004016780223, + -57.000039782410134, + -57.0000394007157, + -57.00003902268345, + -57.000038648278256, + -57.00003827746531, + -57.000037910210146, + -57.00003754647864, + -57.000037186236966, + -57.00003682945165, + -57.000036476089534, + -57.00003612611777, + -57.000035779503825, + -57.00003543621549, + -57.00003509622085, + -57.00003475948831, + -57.00003442598656, + -57.00003409568462, + -57.00003376855177, + -57.00003344455762, + -57.00003312367205, + -57.000032805865224, + -57.00003249110762, + -57.000032179369974, + -57.00003187062331, + -57.000031564838935, + -57.00003126198842, + -57.000030962043624, + -57.00003066497666, + -57.00003037075992, + -57.00003007936606, + -57.000029790768, + -57.0000295049389, + -57.00002922185221, + -57.00002894148161, + -57.00002866380104, + -57.000028388784685, + -57.000028116406995, + -57.000027846642645, + -57.00002757946656, + -57.00002731485392, + -57.00002705278011, + -57.00002679322078, + -57.000026536151815, + -57.0000262815493, + -57.000026029389595, + -57.00002577964924, + -57.00002553230504, + -57.00002528733399, + -57.00002504471333, + -57.00002480442051, + -57.00002456643319, + -57.000024330729254, + -57.00002409728679, + -57.0000238660841, + -57.000023637099694, + -57.000023410312295, + -57.00002318570082, + -57.00002296324439, + -57.00002274292233, + -57.00002252471416, + -57.000022308599604, + -57.00002209455857, + -57.00002188257116, + -57.00002167261768, + -57.0000214646786, + -57.00002125873461, + -57.00002105476656, + -57.0000208527555, + -57.000020652682636, + -57.000020454529384, + -57.000020258277324, + -57.00002006390822, + -57.00001987140399, + -57.00001968074676, + -57.0000194919188, + -57.00001930490256, + -57.00001911968065, + -57.00001893623587, + -57.00001875455116, + -57.000018574609626, + -57.00001839639455, + -57.00001821988938, + -57.00001804507769, + -57.000017871943236, + -57.00001770046993, + -57.00001753064184, + -57.000017362443174, + -57.0000171958583, + -57.00001703087173, + -57.00001686746813, + -57.00001670563232, + -57.00001654534925, + -57.000016386604024, + -57.000016229381885, + -57.00001607366822, + -57.000015919448565, + -57.00001576670858, + -57.00001561543406, + -57.00001546561095, + -57.000015317225326, + -57.0000151702634, + -57.00001502471151, + -57.00001488055612, + -57.00001473778384, + -57.0000145963814, + -57.00001445633565, + -57.00001431763357, + -57.00001418026228, + -57.00001404420901, + -57.0000139094611, + -57.00001377600604, + -57.00001364383142, + -57.000013512924966, + -57.00001338327449, + -57.00001325486796, + -57.00001312769343, + -57.000013001739084, + -57.00001287699321, + -57.00001275344422, + -57.00001263108062, + -57.00001250989105, + -57.00001238986424, + -57.00001227098903, + -57.00001215325438, + -57.00001203664934, + -57.00001192116307, + -57.00001180678484, + -57.00001169350402, + -57.000011581310076, + -57.00001147019258, + -57.000011360141215, + -57.00001125114574, + -57.00001114319603, + -57.000011036282054, + -57.00001093039386, + -57.00001082552162, + -57.000010721655585, + -57.00001061878609, + -57.000010516903586, + -57.0000104159986, + -57.000010316061754, + -57.000010217083755, + -57.0000101190554, + -57.00001002196759, + -57.00000992581129, + -57.00000983057757, + -57.000009736257574, + -57.000009642842535, + -57.000009550323774, + -57.00000945869269, + -57.00000936794076, + -57.00000927805956, + -57.000009189040725, + -57.000009100875985, + -57.00000901355715, + -57.000008927076095, + -57.000008841424794, + -57.00000875659528, + -57.00000867257966, + -57.00000858937014, + -57.00000850695898, + -57.000008425338514, + -57.00000834450116, + -57.0000082644394, + -57.0000081851458, + -57.00000810661299, + -57.00000802883366, + -57.00000795180059, + -57.00000787550662, + -57.000007799944655, + -57.00000772510767, + -57.00000765098872, + -57.0000075775809, + -57.0000075048774, + -57.00000743287146, + -57.000007361556385, + -57.000007290925545, + -57.00000722097238, + -57.000007151690376, + -57.00000708307311, + -57.000007015114186, + -57.0000069478073, + -57.0000068811462, + -57.00000681512468, + -57.000006749736606, + -57.0000066849759, + -57.000006620836544, + -57.00000655731258, + -57.0000064943981, + -57.000006432087254, + -57.00000637037425, + -57.00000630925336, + -57.0000062487189, + -57.000006188765234, + -57.0000061293868, + -57.000006070578074, + -57.00000601233359, + -57.00000595464794, + -57.000005897515756, + -57.00000584093173, + -57.0000057848906, + -57.00000572938716, + -57.00000567441626, + -57.00000561997277, + -57.00000556605164, + -57.00000551264787, + -57.00000545975647, + -57.00000540737255, + -57.000005355491226, + -57.00000530410768, + -57.00000525321714, + -57.00000520281487, + -57.000005152896186, + -57.00000510345645, + -57.00000505449107, + -57.00000500599549, + -57.0000049579652, + -57.000004910395745, + -57.0000048632827, + -57.000004816621676, + -57.000004770408346, + -57.00000472463841, + -57.000004679307615, + -57.00000463441175, + -57.00000458994664, + -57.000004545908155, + -57.0000045022922, + -57.00000445909472, + -57.0000044163117, + -57.00000437393916, + -57.00000433197317, + -57.00000429040983, + -57.000004249245265, + -57.00000420847566, + -57.00000416809722, + -57.00000412810619, + -57.000004088498855, + -57.00000404927154, + -57.00000401042059, + -57.0000039719424, + -57.00000393383339, + -57.00000389609002, + -57.00000385870878, + -57.00000382168619, + -57.00000378501882, + -57.00000374870326, + -57.000003712736124, + -57.00000367711408, + -57.000003641833814, + -57.00000360689205, + -57.000003572285536, + -57.00000353801105, + -57.00000350406542, + -57.00000347044548, + -57.0000034371481, + -57.0000034041702, + -57.00000337150871, + -57.00000333916059, + -57.00000330712284, + -57.00000327539247, + -57.000003243966546, + -57.00000321284214, + -57.00000318201636, + -57.00000315148633, + -57.00000312124923, + -57.00000309130224, + -57.00000306164258, + -57.000003032267486, + -57.000003003174236, + -57.00000297436012, + -57.000002945822466, + -57.00000291755862, + -57.00000288956595, + -57.00000286184186, + -57.000002834383764, + -57.00000280718912, + -57.00000278025539, + -57.000002753580084, + -57.00000272716071, + -57.00000270099483, + -57.00000267507999, + -57.000002649413794, + -57.00000262399385, + -57.0000025988178, + -57.00000257388331, + -57.000002549188046, + -57.00000252472973, + -57.00000250050608, + -57.00000247651484, + -57.00000245275378, + -57.00000242922071, + -57.00000240591342, + -57.000002382829756, + -57.00000235996757, + -57.00000233732474, + -57.00000231489915, + -57.00000229268873, + -57.000002270691404, + -57.00000224890513, + -57.0000022273279, + -57.000002205957685, + -57.00000218479251, + -57.0000021638304, + -57.000002143069416, + -57.000002122507624, + -57.000002102143114, + -57.00000208197399, + -57.00000206199838, + -57.000002042214426, + -57.00000202262029, + -57.000002003214156, + -57.00000198399421, + -57.00000196495867, + -57.00000194610577, + -57.00000192743376, + -57.000001908940895, + -57.00000189062546, + -57.000001872485754, + -57.00000185452009, + -57.0000018367268, + -57.00000181910423, + -57.00000180165073, + -57.0000017843647, + -57.00000176724452, + -57.0000017502886, + -57.00000173349536, + -57.000001716863245, + -57.00000170039071, + -57.000001684076224, + -57.00000166791827, + -57.00000165191534, + -57.00000163606595, + -57.00000162036863, + -57.00000160482192, + -57.00000158942437, + -57.000001574174554, + -57.00000155907105, + -57.000001544112465, + -57.00000152929739, + -57.000001514624465, + -57.000001500092324, + -57.000001485699606, + -57.00000147144498, + -57.00000145732712, + -57.00000144334472, + -57.00000142949647, + -57.00000141578109, + -57.000001402197306, + -57.00000138874385, + -57.00000137541947, + -57.00000136222294, + -57.00000134915302, + -57.0000013362085, + -57.000001323388176, + -57.000001310690855, + -57.000001298115365, + -57.00000128566053, + -57.000001273325196, + -57.00000126110821, + -57.00000124900844, + -57.00000123702476, + -57.00000122515606, + -57.00000121340124, + -57.0000012017592, + -57.00000119022886, + -57.00000117880914, + -57.00000116749899, + -57.000001156297365, + -57.00000114520321, + -57.000001134215495, + -57.000001123333206, + -57.000001112555324, + -57.000001101880855, + -57.0000010913088, + -57.00000108083818, + -57.000001070468024, + -57.00000106019736, + -57.00000105002524, + -57.00000103995072, + -57.00000102997286, + -57.00000102009073, + -57.000001010303414, + -57.000001000610006, + -57.0000009910096, + -57.00000098150131, + -57.000000972084244, + -57.00000096275753, + -57.000000953520306, + -57.000000944371706, + -57.00000093531088, + -57.00000092633699, + -57.0000009174492, + -57.00000090864668, + -57.00000089992862, + -57.000000891294206, + -57.00000088274264, + -57.00000087427312, + -57.00000086588486, + -57.00000085757708, + -57.00000084934901, + -57.000000841199885, + -57.00000083312895, + -57.00000082513545, + -57.00000081721865, + -57.0000008093778, + -57.00000080161218, + -57.00000079392107, + -57.00000078630375, + -57.00000077875952, + -57.000000771287674, + -57.00000076388751, + -57.00000075655836, + -57.00000074929952, + -57.00000074211032, + -57.00000073499011, + -57.00000072793821, + -57.00000072095396, + -57.00000071403673, + -57.00000070718587, + -57.00000070040074, + -57.00000069368071, + -57.00000068702516, + -57.00000068043346, + -57.00000067390501, + -57.00000066743919, + -57.00000066103541, + -57.00000065469307, + -57.00000064841158, + -57.00000064219036, + -57.00000063602883, + -57.00000062992642, + -57.000000623882556, + -57.00000061789668, + -57.00000061196824, + -57.00000060609668, + -57.00000060028145, + -57.00000059452202, + -57.00000058881785, + -57.0000005831684, + -57.00000057757316, + -57.0000005720316, + -57.000000566543214, + -57.000000561107484, + -57.00000055572391, + -57.00000055039199, + -57.00000054511122, + -57.00000053988112, + -57.0000005347012, + -57.00000052957098, + -57.000000524489984, + -57.000000519457735, + -57.00000051447377, + -57.00000050953762, + -57.00000050464884, + -57.00000049980696, + -57.000000495011534, + -57.00000049026212, + -57.000000485558274, + -57.00000048089956, + -57.00000047628554, + -57.00000047171579, + -57.00000046718989, + -57.00000046270741, + -57.00000045826794, + -57.00000045387107, + -57.00000044951638, + -57.00000044520347, + -57.00000044093194, + -57.0000004367014, + -57.00000043251144, + -57.00000042836169, + -57.00000042425175, + -57.000000420181244, + -57.000000416149796, + -57.00000041215702, + -57.00000040820256, + -57.00000040428604, + -57.000000400407096, + -57.00000039656537, + -57.000000392760505, + -57.00000038899214, + -57.00000038525994, + -57.00000038156354, + -57.00000037790261, + -57.0000003742768, + -57.00000037068578, + -57.00000036712922, + -57.00000036360678, + -57.000000360118136, + -57.000000356662966, + -57.00000035324094, + -57.00000034985175, + -57.000000346495085, + -57.00000034317062, + -57.00000033987805, + -57.00000033661707, + -57.00000033338738, + -57.00000033018868, + -57.00000032702067, + -57.00000032388306, + -57.00000032077554, + -57.00000031769785, + -57.000000314649675, + -57.00000031163075, + -57.00000030864079, + -57.00000030567952, + -57.00000030274666, + -57.00000029984194, + -57.00000029696509, + -57.00000029411584, + -57.00000029129393, + -57.000000288499095, + -57.000000285731076, + -57.00000028298962, + -57.000000280274456, + -57.00000027758535, + -57.000000274922044, + -57.00000027228429, + -57.000000269671844, + -57.00000026708447, + -57.00000026452191, + -57.00000026198394, + -57.000000259470326, + -57.000000256980826, + -57.00000025451521, + -57.00000025207325, + -57.00000024965472, + -57.00000024725939, + -57.00000024488705, + -57.00000024253747, + -57.000000240210426, + -57.00000023790572, + -57.00000023562312, + -57.00000023336242, + -57.000000231123416, + -57.00000022890589, + -57.00000022670964, + -57.00000022453446, + -57.00000022238015, + -57.00000022024651, + -57.000000218133344, + -57.000000216040455, + -57.000000213967645, + -57.000000211914724, + -57.0000002098815, + -57.00000020786778, + -57.00000020587338, + -57.00000020389811, + -57.0000002019418, + -57.00000020000426, + -57.00000019808531, + -57.00000019618477, + -57.000000194302466, + -57.00000019243822, + -57.00000019059186, + -57.00000018876322, + -57.00000018695212, + -57.0000001851584, + -57.000000183381886, + -57.00000018162242, + -57.000000179879834, + -57.00000017815397, + -57.00000017644466, + -57.00000017475175, + -57.00000017307508, + -57.0000001714145, + -57.000000169769855, + -57.00000016814099, + -57.000000166527755, + -57.00000016492999, + -57.000000163347565, + -57.00000016178032, + -57.00000016022811, + -57.000000158690796, + -57.00000015716823, + -57.000000155660274, + -57.000000154166784, + -57.000000152687626, + -57.00000015122266, + -57.00000014977174, + -57.00000014833475, + -57.000000146911546, + -57.00000014550199, + -57.00000014410597, + -57.00000014272334, + -57.00000014135397, + -57.000000139997745, + -57.00000013865453, + -57.0000001373242, + -57.00000013600663, + -57.00000013470171, + -57.0000001334093, + -57.0000001321293, + -57.00000013086158, + -57.00000012960602, + -57.00000012836251, + -57.000000127130924, + -57.00000012591116, + -57.00000012470309, + -57.000000123506624, + -57.00000012232163, + -57.000000121148005, + -57.00000011998564, + -57.000000118834436, + -57.00000011769427, + -57.00000011656505, + -57.00000011544666, + -57.000000114339, + -57.000000113241974, + -57.00000011215547, + -57.00000011107939, + -57.00000011001363, + -57.0000001089581, + -57.00000010791269, + -57.000000106877316, + -57.000000105851875, + -57.000000104836275, + -57.000000103830416, + -57.00000010283421, + -57.00000010184756, + -57.00000010087038, + -57.00000009990257, + -57.00000009894405, + -57.00000009799473, + -57.00000009705451, + -57.000000096123316, + -57.00000009520105, + -57.00000009428764, + -57.000000093382994, + -57.00000009248703, + -57.00000009159966, + -57.0000000907208, + -57.000000089850374, + -57.0000000889883, + -57.0000000881345, + -57.00000008728889, + -57.000000086451394, + -57.000000085621934, + -57.00000008480043, + -57.00000008398681, + -57.00000008318099, + -57.00000008238291, + -57.00000008159248, + -57.00000008080964, + -57.00000008003431, + -57.00000007926642, + -57.0000000785059, + -57.00000007775267, + -57.00000007700667, + -57.000000076267824, + -57.00000007553607, + -57.00000007481134, + -57.000000074093556, + -57.00000007338266, + -57.00000007267858, + -57.00000007198126, + -57.000000071290636, + -57.00000007060663, + -57.00000006992919, + -57.000000069258256, + -57.00000006859376, + -57.00000006793563, + -57.00000006728382, + -57.000000066638265, + -57.0000000659989, + -57.00000006536567, + -57.000000064738515, + -57.00000006411738, + -57.0000000635022, + -57.00000006289292, + -57.000000062289494, + -57.00000006169186, + -57.00000006109995, + -57.00000006051373, + -57.00000005993313, + -57.0000000593581, + -57.000000058788586, + -57.000000058224536, + -57.0000000576659, + -57.00000005711262, + -57.00000005656465, + -57.00000005602194, + -57.000000055484435, + -57.00000005495209, + -57.000000054424845, + -57.00000005390266, + -57.00000005338549, + -57.00000005287328, + -57.00000005236599, + -57.000000051863566, + -57.00000005136596, + -57.000000050873126, + -57.00000005038502, + -57.000000049901594, + -57.00000004942281, + -57.00000004894862, + -57.00000004847898, + -57.000000048013845, + -57.00000004755317, + -57.00000004709692, + -57.00000004664504, + -57.000000046197506, + -57.00000004575426, + -57.00000004531527, + -57.00000004488049, + -57.00000004444988, + -57.0000000440234, + -57.00000004360102, + -57.00000004318269, + -57.00000004276837, + -57.000000042358025, + -57.000000041951616, + -57.00000004154911, + -57.000000041150464, + -57.000000040755644, + -57.00000004036461, + -57.00000003997733, + -57.000000039593765, + -57.00000003921388, + -57.00000003883764, + -57.00000003846501, + -57.000000038095955, + -57.000000037730445, + -57.00000003736844, + -57.000000037009904, + -57.00000003665481, + -57.00000003630313, + -57.00000003595481, + -57.000000035609844, + -57.00000003526819, + -57.000000034929805, + -57.00000003459467, + -57.00000003426275, + -57.000000033934015, + -57.00000003360843, + -57.00000003328597, + -57.00000003296661, + -57.00000003265031, + -57.00000003233705, + -57.00000003202679, + -57.00000003171951, + -57.000000031415176, + -57.000000031113764, + -57.000000030815244, + -57.00000003051959, + -57.000000030226765, + -57.00000002993675, + -57.00000002964952, + -57.00000002936505, + -57.0000000290833, + -57.00000002880426, + -57.00000002852789, + -57.00000002825418, + -57.00000002798309, + -57.000000027714606, + -57.0000000274487, + -57.000000027185344, + -57.00000002692451, + -57.00000002666618, + -57.000000026410326, + -57.00000002615693, + -57.00000002590597, + -57.000000025657414, + -57.00000002541124, + -57.00000002516743, + -57.00000002492596, + -57.000000024686805, + -57.000000024449946, + -57.00000002421536, + -57.00000002398303, + -57.00000002375292, + -57.00000002352502, + -57.00000002329931, + -57.00000002307576, + -57.00000002285436, + -57.00000002263508, + -57.00000002241791, + -57.00000002220282, + -57.00000002198979, + -57.00000002177881, + -57.00000002156985, + -57.0000000213629, + -57.00000002115793, + -57.00000002095493, + -57.00000002075387, + -57.00000002055475, + -57.00000002035754, + -57.00000002016222, + -57.00000001996877, + -57.00000001977718, + -57.00000001958743, + -57.0000000193995, + -57.000000019213374, + -57.00000001902903, + -57.00000001884646, + -57.00000001866563, + -57.000000018486546, + -57.00000001830917, + -57.000000018133505, + -57.00000001795952, + -57.00000001778721, + -57.00000001761655, + -57.000000017447526, + -57.00000001728012, + -57.000000017114324, + -57.00000001695012, + -57.00000001678749, + -57.00000001662642, + -57.0000000164669, + -57.00000001630891, + -57.000000016152434, + -57.00000001599746, + -57.000000015843966, + -57.00000001569195, + -57.000000015541396, + -57.00000001539228, + -57.0000000152446, + -57.00000001509834, + -57.00000001495348, + -57.000000014810006, + -57.00000001466791, + -57.00000001452718, + -57.0000000143878, + -57.00000001424976, + -57.000000014113034, + -57.000000013977626, + -57.00000001384352, + -57.0000000137107, + -57.00000001357915, + -57.00000001344886, + -57.00000001331983, + -57.00000001319203, + -57.00000001306546, + -57.000000012940106, + -57.00000001281595, + -57.000000012692986, + -57.0000000125712, + -57.000000012450585, + -57.00000001233113, + -57.000000012212816, + -57.00000001209564, + -57.00000001197959, + -57.00000001186465, + -57.000000011750814, + -57.00000001163807, + -57.00000001152641, + -57.00000001141582, + -57.00000001130629, + -57.00000001119781, + -57.00000001109037, + -57.00000001098397, + -57.00000001087858, + -57.00000001077421, + -57.00000001067083, + -57.00000001056845, + -57.00000001046705, + -57.00000001036662, + -57.00000001026716, + -57.00000001016865, + -57.00000001007108, + -57.00000000997446, + -57.000000009878754, + -57.000000009783975, + -57.000000009690105, + -57.00000000959713, + -57.00000000950505, + -57.00000000941385, + -57.00000000932353, + -57.00000000923407, + -57.000000009145474, + -57.00000000905773, + -57.00000000897082, + -57.000000008884754, + -57.00000000879951, + -57.000000008715084, + -57.00000000863147, + -57.00000000854865, + -57.000000008466635, + -57.0000000083854, + -57.000000008304944, + -57.000000008225264, + -57.000000008146344, + -57.000000008068184, + -57.00000000799077, + -57.0000000079141, + -57.00000000783817, + -57.000000007762964, + -57.000000007688485, + -57.000000007614716, + -57.00000000754166, + -57.000000007469296, + -57.00000000739763, + -57.000000007326655, + -57.00000000725636, + -57.00000000718674, + -57.00000000711779, + -57.0000000070495, + -57.000000006981864, + -57.000000006914874, + -57.00000000684853, + -57.00000000678282, + -57.00000000671774, + -57.00000000665329, + -57.00000000658945, + -57.00000000652623, + -57.000000006463615, + -57.0000000064016, + -57.00000000634018, + -57.00000000627935, + -57.0000000062191, + -57.00000000615943, + -57.000000006100336, + -57.00000000604181, + -57.00000000598384, + -57.00000000592643, + -57.000000005869566, + -57.00000000581325, + -57.00000000575747, + -57.00000000570223, + -57.00000000564752, + -57.000000005593336, + -57.00000000553967, + -57.00000000548652, + -57.000000005433876, + -57.00000000538174, + -57.00000000533011, + -57.00000000527897, + -57.00000000522832, + -57.00000000517816, + -57.00000000512848, + -57.00000000507927, + -57.000000005030536, + -57.00000000498227, + -57.00000000493446, + -57.00000000488712, + -57.00000000484023, + -57.00000000479379, + -57.0000000047478, + -57.000000004702244, + -57.000000004657124, + -57.00000000461244, + -57.000000004568186, + -57.00000000452436, + -57.00000000448095, + -57.00000000443796, + -57.000000004395375, + -57.000000004353204, + -57.00000000431144, + -57.00000000427007, + -57.0000000042291, + -57.00000000418852, + -57.00000000414833, + -57.00000000410853, + -57.00000000406911, + -57.00000000403006, + -57.000000003991396, + -57.0000000039531, + -57.00000000391517, + -57.0000000038776, + -57.0000000038404, + -57.00000000380355, + -57.000000003767056, + -57.00000000373091, + -57.00000000369511, + -57.00000000365966, + -57.00000000362454, + -57.00000000358977, + -57.00000000355533, + -57.000000003521215, + -57.00000000348743, + -57.00000000345397, + -57.00000000342083, + -57.00000000338801, + -57.0000000033555, + -57.00000000332331, + -57.00000000329142, + -57.00000000325984, + -57.000000003228564, + -57.000000003197584, + -57.0000000031669, + -57.00000000313652, + -57.00000000310643, + -57.00000000307662, + -57.000000003047106, + -57.00000000301787, + -57.00000000298891, + -57.000000002960235, + -57.000000002931834, + -57.000000002903704, + -57.000000002875844, + -57.00000000284825, + -57.000000002820926, + -57.00000000279386, + -57.00000000276705, + -57.00000000274051, + -57.00000000271421, + -57.00000000268817, + -57.000000002662375, + -57.00000000263683, + -57.00000000261153, + -57.000000002586475, + -57.000000002561656, + -57.00000000253708, + -57.000000002512735, + -57.000000002488626, + -57.00000000246475, + -57.000000002441105, + -57.000000002417686, + -57.000000002394486, + -57.000000002371515, + -57.00000000234876, + -57.000000002326225, + -57.000000002303906, + -57.0000000022818, + -57.00000000225991, + -57.000000002238224, + -57.00000000221675, + -57.000000002195485, + -57.00000000217442, + -57.000000002153556, + -57.00000000213289, + -57.00000000211243, + -57.000000002092165, + -57.00000000207209, + -57.00000000205221, + -57.00000000203252, + -57.00000000201302, + -57.000000001993705, + -57.00000000197458, + -57.000000001955634, + -57.00000000193687, + -57.00000000191829, + -57.000000001899885, + -57.00000000188166, + -57.000000001863604, + -57.00000000184573, + -57.00000000182802, + -57.000000001810484, + -57.00000000179311, + -57.00000000177591, + -57.00000000175887, + -57.000000001741995, + -57.00000000172528, + -57.00000000170873, + -57.000000001692335, + -57.0000000016761, + -57.00000000166002, + -57.00000000164409, + -57.000000001628315, + -57.00000000161269, + -57.000000001597215, + -57.00000000158189, + -57.00000000156671, + -57.000000001551676, + -57.00000000153679, + -57.00000000152205, + -57.000000001507445, + -57.00000000149298, + -57.000000001478654, + -57.000000001464464, + -57.00000000145042, + -57.0000000014365, + -57.00000000142271, + -57.00000000140906, + -57.00000000139554, + -57.000000001382155, + -57.000000001368896, + -57.000000001355765, + -57.000000001342755, + -57.00000000132987, + -57.00000000131711, + -57.00000000130447, + -57.00000000129196, + -57.00000000127956, + -57.00000000126728, + -57.000000001255124, + -57.00000000124308, + -57.00000000123115, + -57.00000000121934, + -57.000000001207646, + -57.00000000119606, + -57.00000000118458, + -57.00000000117321, + -57.00000000116196, + -57.00000000115081, + -57.00000000113977, + -57.00000000112883, + -57.000000001118, + -57.000000001107274, + -57.00000000109665, + -57.00000000108613, + -57.000000001075705, + -57.00000000106538, + -57.000000001055156, + -57.00000000104503, + -57.000000001035005, + -57.00000000102507, + -57.00000000101524, + -57.000000001005496, + -57.00000000099585, + -57.00000000098629, + -57.000000000976826, + -57.000000000967454, + -57.000000000958174, + -57.00000000094898, + -57.00000000093988, + -57.00000000093086, + -57.00000000092193, + -57.00000000091308, + -57.00000000090432, + -57.000000000895646, + -57.000000000887056, + -57.00000000087854, + -57.000000000870116, + -57.00000000086177, + -57.0000000008535, + -57.00000000084531, + -57.000000000837204, + -57.000000000829175, + -57.00000000082122, + -57.00000000081334, + -57.000000000805535, + -57.000000000797804, + -57.00000000079015, + -57.00000000078257, + -57.00000000077506, + -57.00000000076762, + -57.00000000076025, + -57.000000000752955, + -57.00000000074573, + -57.000000000738574, + -57.00000000073149, + -57.00000000072447, + -57.00000000071752, + -57.000000000710635, + -57.000000000703814, + -57.000000000697064, + -57.00000000069038, + -57.000000000683755, + -57.0000000006772, + -57.0000000006707, + -57.000000000664265, + -57.00000000065789, + -57.00000000065158, + -57.00000000064533, + -57.00000000063914, + -57.00000000063301, + -57.00000000062693, + -57.000000000620915, + -57.00000000061496, + -57.00000000060906, + -57.00000000060322, + -57.00000000059743, + -57.0000000005917, + -57.00000000058602, + -57.0000000005804, + -57.00000000057483, + -57.000000000569315, + -57.00000000056385, + -57.000000000558444, + -57.00000000055309, + -57.00000000054778, + -57.00000000054252, + -57.00000000053731, + -57.000000000532154, + -57.000000000527045, + -57.000000000521986, + -57.00000000051698, + -57.00000000051202, + -57.00000000050711, + -57.00000000050224, + -57.00000000049742, + -57.00000000049265, + -57.00000000048792, + -57.00000000048324, + -57.0000000004786, + -57.00000000047401, + -57.00000000046946, + -57.00000000046496, + -57.000000000460496, + -57.000000000456076, + -57.0000000004517, + -57.000000000447365, + -57.00000000044307, + -57.000000000438824, + -57.00000000043461, + -57.00000000043044, + -57.00000000042631, + -57.00000000042222, + -57.00000000041817, + -57.000000000414154, + -57.00000000041018, + -57.000000000406246, + -57.000000000402345, + -57.00000000039849, + -57.000000000394664, + -57.00000000039088, + -57.000000000387125, + -57.00000000038341, + -57.00000000037973, + -57.00000000037608, + -57.000000000372474, + -57.0000000003689, + -57.00000000036536, + -57.00000000036186, + -57.00000000035838, + -57.000000000354945, + -57.00000000035154, + -57.000000000348166, + -57.000000000344826, + -57.000000000341515, + -57.00000000033824, + -57.00000000033499, + -57.00000000033178, + -57.0000000003286, + -57.00000000032544, + -57.00000000032232, + -57.00000000031923, + -57.00000000031617, + -57.000000000313136, + -57.00000000031013, + -57.00000000030715, + -57.000000000304205, + -57.000000000301284, + -57.00000000029839, + -57.00000000029553, + -57.000000000292694, + -57.00000000028989, + -57.00000000028711, + -57.00000000028435, + -57.000000000281624, + -57.00000000027892, + -57.000000000276245, + -57.000000000273594, + -57.00000000027097, + -57.00000000026837, + -57.0000000002658, + -57.00000000026325, + -57.00000000026073, + -57.000000000258225, + -57.000000000255746, + -57.000000000253294, + -57.000000000250864, + -57.000000000248455, + -57.000000000246075, + -57.000000000243716, + -57.00000000024138, + -57.00000000023906, + -57.00000000023677, + -57.00000000023449, + -57.00000000023224, + -57.00000000023001, + -57.0000000002278, + -57.00000000022561, + -57.000000000223444, + -57.0000000002213, + -57.000000000219174, + -57.00000000021707, + -57.00000000021499, + -57.00000000021293, + -57.00000000021088, + -57.00000000020886, + -57.00000000020685, + -57.00000000020487, + -57.0000000002029, + -57.000000000200956, + -57.00000000019903, + -57.00000000019712, + -57.00000000019523, + -57.00000000019335, + -57.0000000001915, + -57.00000000018966, + -57.00000000018784, + -57.000000000186034, + -57.00000000018425, + -57.00000000018248, + -57.000000000180734, + -57.000000000179, + -57.00000000017728, + -57.00000000017558, + -57.0000000001739, + -57.00000000017223, + -57.00000000017057, + -57.00000000016894, + -57.00000000016732, + -57.00000000016571, + -57.00000000016412, + -57.000000000162544, + -57.00000000016099, + -57.000000000159446, + -57.00000000015792, + -57.000000000156405, + -57.000000000154905, + -57.00000000015342, + -57.00000000015195, + -57.00000000015049, + -57.00000000014905, + -57.00000000014762, + -57.00000000014621, + -57.00000000014481, + -57.000000000143416, + -57.00000000014204, + -57.00000000014067, + -57.00000000013932, + -57.00000000013799, + -57.000000000136666, + -57.00000000013535, + -57.00000000013405, + -57.000000000132765, + -57.00000000013149, + -57.00000000013023, + -57.00000000012898, + -57.00000000012774, + -57.00000000012652, + -57.000000000125304, + -57.0000000001241, + -57.00000000012291, + -57.00000000012173, + -57.000000000120565, + -57.00000000011941, + -57.00000000011826, + -57.000000000117126, + -57.000000000116, + -57.00000000011489, + -57.000000000113786, + -57.00000000011269, + -57.00000000011161, + -57.00000000011054, + -57.00000000010948, + -57.00000000010843, + -57.00000000010739, + -57.00000000010636, + -57.00000000010534, + -57.00000000010433, + -57.00000000010333, + -57.00000000010233, + -57.00000000010135, + -57.00000000010038, + -57.00000000009941, + -57.00000000009846, + -57.000000000097515, + -57.00000000009658, + -57.00000000009565, + -57.00000000009474, + -57.00000000009383, + -57.000000000092925, + -57.00000000009204, + -57.000000000091156, + -57.00000000009028, + -57.000000000089415, + -57.000000000088555, + -57.0000000000877, + -57.000000000086864, + -57.00000000008603, + -57.00000000008521, + -57.00000000008439, + -57.00000000008358, + -57.00000000008278, + -57.00000000008198, + -57.000000000081194, + -57.00000000008041, + -57.00000000007964, + -57.00000000007887, + -57.00000000007812, + -57.00000000007737, + -57.00000000007663, + -57.0000000000759, + -57.000000000075175, + -57.00000000007445, + -57.00000000007373, + -57.00000000007302, + -57.00000000007232, + -57.00000000007162, + -57.00000000007093, + -57.00000000007025, + -57.000000000069576, + -57.00000000006891, + -57.00000000006825, + -57.000000000067594, + -57.00000000006695, + -57.00000000006631, + -57.00000000006567, + -57.000000000065036, + -57.00000000006441, + -57.00000000006379, + -57.00000000006318, + -57.00000000006258, + -57.00000000006198, + -57.000000000061384, + -57.000000000060794, + -57.00000000006021, + -57.000000000059636, + -57.00000000005906, + -57.00000000005849, + -57.00000000005793, + -57.000000000057376, + -57.00000000005683, + -57.00000000005628, + -57.00000000005574, + -57.00000000005521, + -57.000000000054676, + -57.00000000005415, + -57.00000000005363, + -57.00000000005312, + -57.00000000005261, + -57.000000000052104, + -57.00000000005161, + -57.00000000005111, + -57.00000000005062, + -57.000000000050136, + -57.00000000004965, + -57.00000000004918, + -57.00000000004871, + -57.00000000004824, + -57.00000000004778, + -57.000000000047315, + -57.00000000004686, + -57.00000000004641, + -57.000000000045965, + -57.000000000045524, + -57.00000000004509, + -57.00000000004466, + -57.00000000004423, + -57.000000000043805, + -57.000000000043386, + -57.00000000004297, + -57.000000000042554, + -57.00000000004215, + -57.000000000041744, + -57.00000000004135, + -57.00000000004095, + -57.00000000004056, + -57.00000000004017, + -57.00000000003978, + -57.0000000000394, + -57.00000000003902, + -57.000000000038646, + -57.00000000003828, + -57.00000000003791, + -57.000000000037545, + -57.00000000003718, + -57.00000000003683, + -57.00000000003647, + -57.000000000036124, + -57.000000000035776, + -57.000000000035435, + -57.000000000035094, + -57.00000000003476, + -57.000000000034426, + -57.0000000000341, + -57.00000000003377, + -57.000000000033445, + -57.000000000033126, + -57.000000000032806, + -57.00000000003249, + -57.00000000003218, + -57.000000000031875, + -57.00000000003157, + -57.000000000031264, + -57.000000000030965, + -57.00000000003067, + -57.000000000030376, + -57.000000000030084, + -57.00000000002979, + -57.00000000002951, + -57.000000000029225, + -57.00000000002895, + -57.00000000002867, + -57.00000000002839, + -57.00000000002812, + -57.00000000002785, + -57.00000000002758, + -57.00000000002732, + -57.00000000002706, + -57.000000000026795, + -57.00000000002654, + -57.00000000002628, + -57.000000000026034, + -57.000000000025786, + -57.00000000002554, + -57.000000000025295, + -57.000000000025054, + -57.00000000002481, + -57.00000000002457, + -57.000000000024336, + -57.0000000000241, + -57.00000000002387, + -57.00000000002364, + -57.00000000002341, + -57.000000000023185, + -57.000000000022965, + -57.000000000022744, + -57.000000000022524, + -57.00000000002231, + -57.0000000000221, + -57.000000000021885, + -57.00000000002167, + -57.000000000021465, + -57.00000000002126, + -57.00000000002105, + -57.000000000020854, + -57.000000000020655, + -57.00000000002046, + -57.00000000002026, + -57.000000000020066, + -57.000000000019874, + -57.00000000001968, + -57.00000000001949, + -57.000000000019305, + -57.00000000001912, + -57.000000000018936, + -57.00000000001875, + -57.000000000018574, + -57.000000000018396, + -57.00000000001822, + -57.00000000001804, + -57.00000000001787, + -57.0000000000177, + -57.00000000001753, + -57.00000000001736, + -57.000000000017195, + -57.00000000001703, + -57.00000000001687, + -57.000000000016705, + -57.00000000001654, + -57.000000000016385, + -57.00000000001623, + -57.00000000001607, + -57.000000000015916, + -57.00000000001577, + -57.00000000001562, + -57.00000000001547, + -57.00000000001532, + -57.00000000001517, + -57.00000000001503, + -57.000000000014886, + -57.000000000014744, + -57.0000000000146, + -57.00000000001446, + -57.00000000001432, + -57.00000000001418, + -57.00000000001405, + -57.00000000001391, + -57.00000000001378, + -57.00000000001364, + -57.000000000013515, + -57.00000000001339, + -57.00000000001326, + -57.00000000001313, + -57.000000000013, + -57.000000000012875, + -57.000000000012754, + -57.00000000001263, + -57.00000000001251, + -57.00000000001239, + -57.00000000001227, + -57.00000000001215, + -57.00000000001204, + -57.00000000001192, + -57.00000000001181, + -57.000000000011696, + -57.00000000001158, + -57.00000000001147, + -57.00000000001136, + -57.000000000011255, + -57.00000000001115, + -57.00000000001104, + -57.000000000010935, + -57.00000000001083, + -57.00000000001072, + -57.00000000001062, + -57.00000000001052, + -57.000000000010424, + -57.000000000010324, + -57.000000000010225, + -57.000000000010125, + -57.000000000010026, + -57.000000000009926, + -57.000000000009834, + -57.00000000000974, + -57.00000000000965, + -57.00000000000956, + -57.000000000009464, + -57.00000000000937, + -57.00000000000928, + -57.00000000000919, + -57.0000000000091, + -57.00000000000902, + -57.00000000000893, + -57.000000000008846, + -57.00000000000876, + -57.000000000008676, + -57.00000000000859, + -57.000000000008505, + -57.00000000000843, + -57.00000000000835, + -57.00000000000827, + -57.00000000000819, + -57.000000000008114, + -57.000000000008036, + -57.00000000000796, + -57.00000000000788, + -57.0000000000078, + -57.000000000007724, + -57.00000000000765, + -57.00000000000758, + -57.00000000000751, + -57.00000000000744, + -57.00000000000737, + -57.0000000000073, + -57.000000000007226, + -57.000000000007155, + -57.000000000007084, + -57.00000000000701, + -57.00000000000695, + -57.000000000006885, + -57.00000000000682, + -57.00000000000676, + -57.00000000000669, + -57.00000000000663, + -57.000000000006565, + -57.0000000000065, + -57.00000000000644, + -57.000000000006374, + -57.00000000000631, + -57.000000000006246, + -57.00000000000619, + -57.00000000000613, + -57.000000000006075, + -57.00000000000602, + -57.00000000000596, + -57.000000000005905, + -57.00000000000585, + -57.00000000000579, + -57.000000000005734, + -57.00000000000568, + -57.00000000000562, + -57.00000000000556, + -57.00000000000551, + -57.00000000000546, + -57.00000000000541, + -57.00000000000536, + -57.00000000000531, + -57.00000000000526, + -57.00000000000521, + -57.00000000000516, + -57.00000000000511, + -57.00000000000506, + -57.00000000000501, + -57.00000000000496, + -57.00000000000491, + -57.00000000000486, + -57.00000000000481, + -57.00000000000477, + -57.000000000004725, + -57.00000000000468, + -57.00000000000464, + -57.0000000000046, + -57.000000000004555, + -57.00000000000451, + -57.00000000000447, + -57.00000000000443, + -57.000000000004384, + -57.00000000000434, + -57.0000000000043, + -57.000000000004256, + -57.00000000000421, + -57.00000000000417, + -57.00000000000413, + -57.000000000004086, + -57.00000000000404, + -57.00000000000401, + -57.00000000000397, + -57.000000000003936, + -57.0000000000039, + -57.000000000003865, + -57.00000000000383, + -57.000000000003794, + -57.00000000000376, + -57.00000000000372, + -57.00000000000369, + -57.00000000000365, + -57.00000000000362, + -57.00000000000358, + -57.000000000003546, + -57.00000000000351, + -57.000000000003475, + -57.00000000000344, + -57.0000000000034, + -57.00000000000337, + -57.00000000000333, + -57.000000000003304, + -57.000000000003276, + -57.00000000000325, + -57.00000000000322, + -57.00000000000319, + -57.00000000000316, + -57.00000000000313, + -57.000000000003105, + -57.00000000000308, + -57.00000000000305, + -57.00000000000302, + -57.00000000000299, + -57.00000000000296, + -57.000000000002935, + -57.000000000002906, + -57.00000000000288, + -57.00000000000285, + -57.00000000000282, + -57.00000000000279, + -57.000000000002764, + -57.000000000002736, + -57.00000000000271, + -57.00000000000268, + -57.00000000000265, + -57.00000000000262, + -57.00000000000259, + -57.000000000002565, + -57.000000000002544, + -57.00000000000252, + -57.0000000000025, + -57.00000000000248, + -57.00000000000246, + -57.00000000000244, + -57.000000000002416, + -57.000000000002395, + -57.00000000000237, + -57.00000000000235, + -57.00000000000233, + -57.00000000000231, + -57.00000000000229, + -57.00000000000227, + -57.000000000002245, + -57.000000000002224, + -57.0000000000022, + -57.00000000000218, + -57.00000000000216, + -57.00000000000214, + -57.00000000000212, + -57.000000000002096, + -57.000000000002075, + -57.00000000000205, + -57.00000000000203, + -57.00000000000201, + -57.00000000000199, + -57.00000000000197, + -57.00000000000195, + -57.000000000001926, + -57.000000000001904, + -57.00000000000188, + -57.00000000000186, + -57.00000000000184, + -57.000000000001826, + -57.00000000000181, + -57.0000000000018, + -57.00000000000178, + -57.00000000000177, + -57.000000000001755, + -57.00000000000174, + -57.00000000000173, + -57.00000000000171, + -57.0000000000017, + -57.000000000001684, + -57.00000000000167, + -57.000000000001656, + -57.00000000000164, + -57.00000000000163, + -57.00000000000161, + -57.0000000000016, + -57.000000000001585, + -57.00000000000157, + -57.000000000001556, + -57.00000000000154, + -57.00000000000153, + -57.00000000000151, + -57.0000000000015, + -57.000000000001485, + -57.00000000000147, + -57.00000000000146, + -57.00000000000144, + -57.00000000000143, + -57.000000000001414, + -57.0000000000014, + -57.000000000001386, + -57.00000000000137, + -57.00000000000136, + -57.00000000000134, + -57.00000000000133, + -57.000000000001315, + -57.0000000000013, + -57.000000000001286, + -57.00000000000127, + -57.00000000000126, + -57.00000000000124, + -57.00000000000123, + -57.000000000001215, + -57.0000000000012, + -57.00000000000119, + -57.00000000000117, + -57.00000000000116, + -57.000000000001144, + -57.00000000000113, + -57.000000000001116, + -57.0000000000011, + -57.000000000001094, + -57.00000000000109, + -57.00000000000108, + -57.00000000000107, + -57.000000000001066, + -57.00000000000106, + -57.00000000000105, + -57.000000000001044, + -57.00000000000104, + -57.00000000000103, + -57.00000000000102, + -57.000000000001016, + -57.00000000000101, + -57.000000000001, + -57.000000000000995, + -57.00000000000099, + -57.00000000000098, + -57.00000000000097, + -57.000000000000966, + -57.00000000000096, + -57.00000000000095, + -57.000000000000945, + -57.00000000000094, + -57.00000000000093, + -57.000000000000924, + -57.00000000000092, + -57.00000000000091, + -57.0000000000009, + -57.000000000000895, + -57.00000000000089, + -57.00000000000088, + -57.000000000000874, + -57.00000000000087, + -57.00000000000086, + -57.00000000000085, + -57.000000000000846, + -57.00000000000084, + -57.00000000000083, + -57.000000000000824, + -57.00000000000082, + -57.00000000000081, + -57.0000000000008, + -57.000000000000796, + -57.00000000000079, + -57.00000000000078, + -57.000000000000774, + -57.00000000000077, + -57.00000000000076, + -57.00000000000075, + -57.000000000000746, + -57.00000000000074, + -57.00000000000073, + -57.000000000000725, + -57.00000000000072, + -57.00000000000071, + -57.0000000000007, + -57.000000000000696, + -57.00000000000069, + -57.00000000000068, + -57.000000000000675, + -57.00000000000067, + -57.00000000000066, + -57.000000000000654, + -57.00000000000065, + -57.00000000000064, + -57.00000000000063, + -57.000000000000625, + -57.00000000000062, + -57.00000000000061, + -57.000000000000604, + -57.0000000000006, + -57.00000000000059, + -57.00000000000058, + -57.000000000000576, + -57.00000000000057, + -57.00000000000056, + -57.000000000000554, + -57.00000000000055, + -57.00000000000054, + -57.00000000000053, + -57.000000000000526, + -57.00000000000052, + -57.00000000000051, + -57.000000000000504, + -57.0000000000005, + -57.00000000000049, + -57.00000000000048, + -57.000000000000476, + -57.00000000000047, + -57.00000000000046, + -57.000000000000455, + -57.00000000000045, + -57.00000000000044, + -57.00000000000043, + -57.000000000000426, + -57.00000000000042, + -57.00000000000041, + -57.000000000000405, + -57.0000000000004, + -57.00000000000039, + -57.000000000000384, + -57.00000000000038, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037, + -57.00000000000037 + ] + }, + "spkid": [], + "spkt": [], + "stims": { + "cell_0": {}, + "cell_1": {} + }, + "t": [ + 0.0, + 0.05, + 0.1, + 0.15000000000000002, + 0.2, + 0.25, + 0.3, + 0.35, + 0.39999999999999997, + 0.44999999999999996, + 0.49999999999999994, + 0.5499999999999999, + 0.6, + 0.65, + 0.7000000000000001, + 0.7500000000000001, + 0.8000000000000002, + 0.8500000000000002, + 0.9000000000000002, + 0.9500000000000003, + 1.0000000000000002, + 1.0500000000000003, + 1.1000000000000003, + 1.1500000000000004, + 1.2000000000000004, + 1.2500000000000004, + 1.3000000000000005, + 1.3500000000000005, + 1.4000000000000006, + 1.4500000000000006, + 1.5000000000000007, + 1.5500000000000007, + 1.6000000000000008, + 1.6500000000000008, + 1.7000000000000008, + 1.7500000000000009, + 1.800000000000001, + 1.850000000000001, + 1.900000000000001, + 1.950000000000001, + 2.000000000000001, + 2.0500000000000007, + 2.1000000000000005, + 2.1500000000000004, + 2.2, + 2.25, + 2.3, + 2.3499999999999996, + 2.3999999999999995, + 2.4499999999999993, + 2.499999999999999, + 2.549999999999999, + 2.5999999999999988, + 2.6499999999999986, + 2.6999999999999984, + 2.7499999999999982, + 2.799999999999998, + 2.849999999999998, + 2.8999999999999977, + 2.9499999999999975, + 2.9999999999999973, + 3.049999999999997, + 3.099999999999997, + 3.149999999999997, + 3.1999999999999966, + 3.2499999999999964, + 3.2999999999999963, + 3.349999999999996, + 3.399999999999996, + 3.4499999999999957, + 3.4999999999999956, + 3.5499999999999954, + 3.599999999999995, + 3.649999999999995, + 3.699999999999995, + 3.7499999999999947, + 3.7999999999999945, + 3.8499999999999943, + 3.899999999999994, + 3.949999999999994, + 3.999999999999994, + 4.049999999999994, + 4.099999999999993, + 4.149999999999993, + 4.199999999999993, + 4.249999999999993, + 4.299999999999993, + 4.3499999999999925, + 4.399999999999992, + 4.449999999999992, + 4.499999999999992, + 4.549999999999992, + 4.599999999999992, + 4.6499999999999915, + 4.699999999999991, + 4.749999999999991, + 4.799999999999991, + 4.849999999999991, + 4.899999999999991, + 4.94999999999999, + 4.99999999999999, + 5.04999999999999, + 5.09999999999999, + 5.14999999999999, + 5.1999999999999895, + 5.249999999999989, + 5.299999999999989, + 5.349999999999989, + 5.399999999999989, + 5.449999999999989, + 5.4999999999999885, + 5.549999999999988, + 5.599999999999988, + 5.649999999999988, + 5.699999999999988, + 5.749999999999988, + 5.799999999999987, + 5.849999999999987, + 5.899999999999987, + 5.949999999999987, + 5.999999999999987, + 6.0499999999999865, + 6.099999999999986, + 6.149999999999986, + 6.199999999999986, + 6.249999999999986, + 6.299999999999986, + 6.349999999999985, + 6.399999999999985, + 6.449999999999985, + 6.499999999999985, + 6.549999999999985, + 6.5999999999999845, + 6.649999999999984, + 6.699999999999984, + 6.749999999999984, + 6.799999999999984, + 6.849999999999984, + 6.8999999999999835, + 6.949999999999983, + 6.999999999999983, + 7.049999999999983, + 7.099999999999983, + 7.149999999999983, + 7.199999999999982, + 7.249999999999982, + 7.299999999999982, + 7.349999999999982, + 7.399999999999982, + 7.4499999999999815, + 7.499999999999981, + 7.549999999999981, + 7.599999999999981, + 7.649999999999981, + 7.699999999999981, + 7.7499999999999805, + 7.79999999999998, + 7.84999999999998, + 7.89999999999998, + 7.94999999999998, + 7.99999999999998, + 8.04999999999998, + 8.09999999999998, + 8.14999999999998, + 8.199999999999982, + 8.249999999999982, + 8.299999999999983, + 8.349999999999984, + 8.399999999999984, + 8.449999999999985, + 8.499999999999986, + 8.549999999999986, + 8.599999999999987, + 8.649999999999988, + 8.699999999999989, + 8.74999999999999, + 8.79999999999999, + 8.84999999999999, + 8.899999999999991, + 8.949999999999992, + 8.999999999999993, + 9.049999999999994, + 9.099999999999994, + 9.149999999999995, + 9.199999999999996, + 9.249999999999996, + 9.299999999999997, + 9.349999999999998, + 9.399999999999999, + 9.45, + 9.5, + 9.55, + 9.600000000000001, + 9.650000000000002, + 9.700000000000003, + 9.750000000000004, + 9.800000000000004, + 9.850000000000005, + 9.900000000000006, + 9.950000000000006, + 10.000000000000007, + 10.050000000000008, + 10.100000000000009, + 10.15000000000001, + 10.20000000000001, + 10.25000000000001, + 10.300000000000011, + 10.350000000000012, + 10.400000000000013, + 10.450000000000014, + 10.500000000000014, + 10.550000000000015, + 10.600000000000016, + 10.650000000000016, + 10.700000000000017, + 10.750000000000018, + 10.800000000000018, + 10.85000000000002, + 10.90000000000002, + 10.95000000000002, + 11.000000000000021, + 11.050000000000022, + 11.100000000000023, + 11.150000000000023, + 11.200000000000024, + 11.250000000000025, + 11.300000000000026, + 11.350000000000026, + 11.400000000000027, + 11.450000000000028, + 11.500000000000028, + 11.55000000000003, + 11.60000000000003, + 11.65000000000003, + 11.700000000000031, + 11.750000000000032, + 11.800000000000033, + 11.850000000000033, + 11.900000000000034, + 11.950000000000035, + 12.000000000000036, + 12.050000000000036, + 12.100000000000037, + 12.150000000000038, + 12.200000000000038, + 12.250000000000039, + 12.30000000000004, + 12.35000000000004, + 12.400000000000041, + 12.450000000000042, + 12.500000000000043, + 12.550000000000043, + 12.600000000000044, + 12.650000000000045, + 12.700000000000045, + 12.750000000000046, + 12.800000000000047, + 12.850000000000048, + 12.900000000000048, + 12.950000000000049, + 13.00000000000005, + 13.05000000000005, + 13.100000000000051, + 13.150000000000052, + 13.200000000000053, + 13.250000000000053, + 13.300000000000054, + 13.350000000000055, + 13.400000000000055, + 13.450000000000056, + 13.500000000000057, + 13.550000000000058, + 13.600000000000058, + 13.650000000000059, + 13.70000000000006, + 13.75000000000006, + 13.800000000000061, + 13.850000000000062, + 13.900000000000063, + 13.950000000000063, + 14.000000000000064, + 14.050000000000065, + 14.100000000000065, + 14.150000000000066, + 14.200000000000067, + 14.250000000000068, + 14.300000000000068, + 14.350000000000069, + 14.40000000000007, + 14.45000000000007, + 14.500000000000071, + 14.550000000000072, + 14.600000000000072, + 14.650000000000073, + 14.700000000000074, + 14.750000000000075, + 14.800000000000075, + 14.850000000000076, + 14.900000000000077, + 14.950000000000077, + 15.000000000000078, + 15.050000000000079, + 15.10000000000008, + 15.15000000000008, + 15.200000000000081, + 15.250000000000082, + 15.300000000000082, + 15.350000000000083, + 15.400000000000084, + 15.450000000000085, + 15.500000000000085, + 15.550000000000086, + 15.600000000000087, + 15.650000000000087, + 15.700000000000088, + 15.750000000000089, + 15.80000000000009, + 15.85000000000009, + 15.900000000000091, + 15.950000000000092, + 16.000000000000092, + 16.050000000000093, + 16.100000000000094, + 16.150000000000095, + 16.200000000000095, + 16.250000000000096, + 16.300000000000097, + 16.350000000000097, + 16.400000000000098, + 16.4500000000001, + 16.5000000000001, + 16.5500000000001, + 16.6000000000001, + 16.6500000000001, + 16.700000000000102, + 16.750000000000103, + 16.800000000000104, + 16.850000000000104, + 16.900000000000105, + 16.950000000000106, + 17.000000000000107, + 17.050000000000107, + 17.100000000000108, + 17.15000000000011, + 17.20000000000011, + 17.25000000000011, + 17.30000000000011, + 17.35000000000011, + 17.400000000000112, + 17.450000000000113, + 17.500000000000114, + 17.550000000000114, + 17.600000000000115, + 17.650000000000116, + 17.700000000000117, + 17.750000000000117, + 17.800000000000118, + 17.85000000000012, + 17.90000000000012, + 17.95000000000012, + 18.00000000000012, + 18.05000000000012, + 18.100000000000122, + 18.150000000000123, + 18.200000000000124, + 18.250000000000124, + 18.300000000000125, + 18.350000000000126, + 18.400000000000126, + 18.450000000000127, + 18.500000000000128, + 18.55000000000013, + 18.60000000000013, + 18.65000000000013, + 18.70000000000013, + 18.75000000000013, + 18.800000000000132, + 18.850000000000133, + 18.900000000000134, + 18.950000000000134, + 19.000000000000135, + 19.050000000000136, + 19.100000000000136, + 19.150000000000137, + 19.200000000000138, + 19.25000000000014, + 19.30000000000014, + 19.35000000000014, + 19.40000000000014, + 19.45000000000014, + 19.500000000000142, + 19.550000000000143, + 19.600000000000144, + 19.650000000000144, + 19.700000000000145, + 19.750000000000146, + 19.800000000000146, + 19.850000000000147, + 19.900000000000148, + 19.95000000000015, + 20.00000000000015, + 20.05000000000015, + 20.10000000000015, + 20.15000000000015, + 20.200000000000152, + 20.250000000000153, + 20.300000000000153, + 20.350000000000154, + 20.400000000000155, + 20.450000000000156, + 20.500000000000156, + 20.550000000000157, + 20.600000000000158, + 20.65000000000016, + 20.70000000000016, + 20.75000000000016, + 20.80000000000016, + 20.85000000000016, + 20.900000000000162, + 20.950000000000163, + 21.000000000000163, + 21.050000000000164, + 21.100000000000165, + 21.150000000000166, + 21.200000000000166, + 21.250000000000167, + 21.300000000000168, + 21.35000000000017, + 21.40000000000017, + 21.45000000000017, + 21.50000000000017, + 21.55000000000017, + 21.600000000000172, + 21.650000000000173, + 21.700000000000173, + 21.750000000000174, + 21.800000000000175, + 21.850000000000176, + 21.900000000000176, + 21.950000000000177, + 22.000000000000178, + 22.05000000000018, + 22.10000000000018, + 22.15000000000018, + 22.20000000000018, + 22.25000000000018, + 22.300000000000182, + 22.350000000000183, + 22.400000000000183, + 22.450000000000184, + 22.500000000000185, + 22.550000000000185, + 22.600000000000186, + 22.650000000000187, + 22.700000000000188, + 22.75000000000019, + 22.80000000000019, + 22.85000000000019, + 22.90000000000019, + 22.95000000000019, + 23.000000000000192, + 23.050000000000193, + 23.100000000000193, + 23.150000000000194, + 23.200000000000195, + 23.250000000000195, + 23.300000000000196, + 23.350000000000197, + 23.400000000000198, + 23.4500000000002, + 23.5000000000002, + 23.5500000000002, + 23.6000000000002, + 23.6500000000002, + 23.700000000000202, + 23.750000000000203, + 23.800000000000203, + 23.850000000000204, + 23.900000000000205, + 23.950000000000205, + 24.000000000000206, + 24.050000000000207, + 24.100000000000207, + 24.150000000000208, + 24.20000000000021, + 24.25000000000021, + 24.30000000000021, + 24.35000000000021, + 24.40000000000021, + 24.450000000000212, + 24.500000000000213, + 24.550000000000214, + 24.600000000000215, + 24.650000000000215, + 24.700000000000216, + 24.750000000000217, + 24.800000000000217, + 24.850000000000218, + 24.90000000000022, + 24.95000000000022, + 25.00000000000022, + 25.05000000000022, + 25.10000000000022, + 25.150000000000222, + 25.200000000000223, + 25.250000000000224, + 25.300000000000225, + 25.350000000000225, + 25.400000000000226, + 25.450000000000227, + 25.500000000000227, + 25.550000000000228, + 25.60000000000023, + 25.65000000000023, + 25.70000000000023, + 25.75000000000023, + 25.80000000000023, + 25.850000000000232, + 25.900000000000233, + 25.950000000000234, + 26.000000000000234, + 26.050000000000235, + 26.100000000000236, + 26.150000000000237, + 26.200000000000237, + 26.250000000000238, + 26.30000000000024, + 26.35000000000024, + 26.40000000000024, + 26.45000000000024, + 26.50000000000024, + 26.550000000000242, + 26.600000000000243, + 26.650000000000244, + 26.700000000000244, + 26.750000000000245, + 26.800000000000246, + 26.850000000000247, + 26.900000000000247, + 26.950000000000248, + 27.00000000000025, + 27.05000000000025, + 27.10000000000025, + 27.15000000000025, + 27.20000000000025, + 27.250000000000252, + 27.300000000000253, + 27.350000000000254, + 27.400000000000254, + 27.450000000000255, + 27.500000000000256, + 27.550000000000257, + 27.600000000000257, + 27.650000000000258, + 27.70000000000026, + 27.75000000000026, + 27.80000000000026, + 27.85000000000026, + 27.90000000000026, + 27.950000000000262, + 28.000000000000263, + 28.050000000000264, + 28.100000000000264, + 28.150000000000265, + 28.200000000000266, + 28.250000000000266, + 28.300000000000267, + 28.350000000000268, + 28.40000000000027, + 28.45000000000027, + 28.50000000000027, + 28.55000000000027, + 28.60000000000027, + 28.650000000000272, + 28.700000000000273, + 28.750000000000274, + 28.800000000000274, + 28.850000000000275, + 28.900000000000276, + 28.950000000000276, + 29.000000000000277, + 29.050000000000278, + 29.10000000000028, + 29.15000000000028, + 29.20000000000028, + 29.25000000000028, + 29.30000000000028, + 29.350000000000282, + 29.400000000000283, + 29.450000000000284, + 29.500000000000284, + 29.550000000000285, + 29.600000000000286, + 29.650000000000286, + 29.700000000000287, + 29.750000000000288, + 29.80000000000029, + 29.85000000000029, + 29.90000000000029, + 29.95000000000029, + 30.00000000000029, + 30.050000000000292, + 30.100000000000293, + 30.150000000000293, + 30.200000000000294, + 30.250000000000295, + 30.300000000000296, + 30.350000000000296, + 30.400000000000297, + 30.450000000000298, + 30.5000000000003, + 30.5500000000003, + 30.6000000000003, + 30.6500000000003, + 30.7000000000003, + 30.750000000000302, + 30.800000000000303, + 30.850000000000303, + 30.900000000000304, + 30.950000000000305, + 31.000000000000306, + 31.050000000000306, + 31.100000000000307, + 31.150000000000308, + 31.20000000000031, + 31.25000000000031, + 31.30000000000031, + 31.35000000000031, + 31.40000000000031, + 31.450000000000312, + 31.500000000000313, + 31.550000000000313, + 31.600000000000314, + 31.650000000000315, + 31.700000000000315, + 31.750000000000316, + 31.800000000000317, + 31.850000000000318, + 31.90000000000032, + 31.95000000000032, + 32.00000000000032, + 32.05000000000032, + 32.100000000000314, + 32.15000000000031, + 32.20000000000031, + 32.250000000000306, + 32.3000000000003, + 32.3500000000003, + 32.4000000000003, + 32.450000000000294, + 32.50000000000029, + 32.55000000000029, + 32.600000000000286, + 32.65000000000028, + 32.70000000000028, + 32.75000000000028, + 32.800000000000274, + 32.85000000000027, + 32.90000000000027, + 32.950000000000266, + 33.00000000000026, + 33.05000000000026, + 33.10000000000026, + 33.150000000000254, + 33.20000000000025, + 33.25000000000025, + 33.300000000000246, + 33.35000000000024, + 33.40000000000024, + 33.45000000000024, + 33.500000000000234, + 33.55000000000023, + 33.60000000000023, + 33.650000000000226, + 33.70000000000022, + 33.75000000000022, + 33.80000000000022, + 33.850000000000215, + 33.90000000000021, + 33.95000000000021, + 34.000000000000206, + 34.0500000000002, + 34.1000000000002, + 34.1500000000002, + 34.200000000000195, + 34.25000000000019, + 34.30000000000019, + 34.350000000000186, + 34.40000000000018, + 34.45000000000018, + 34.50000000000018, + 34.550000000000175, + 34.60000000000017, + 34.65000000000017, + 34.700000000000166, + 34.75000000000016, + 34.80000000000016, + 34.85000000000016, + 34.900000000000155, + 34.95000000000015, + 35.00000000000015, + 35.050000000000146, + 35.10000000000014, + 35.15000000000014, + 35.20000000000014, + 35.250000000000135, + 35.30000000000013, + 35.35000000000013, + 35.40000000000013, + 35.450000000000124, + 35.50000000000012, + 35.55000000000012, + 35.600000000000115, + 35.65000000000011, + 35.70000000000011, + 35.75000000000011, + 35.800000000000104, + 35.8500000000001, + 35.9000000000001, + 35.950000000000095, + 36.00000000000009, + 36.05000000000009, + 36.10000000000009, + 36.150000000000084, + 36.20000000000008, + 36.25000000000008, + 36.300000000000075, + 36.35000000000007, + 36.40000000000007, + 36.45000000000007, + 36.500000000000064, + 36.55000000000006, + 36.60000000000006, + 36.650000000000055, + 36.70000000000005, + 36.75000000000005, + 36.80000000000005, + 36.850000000000044, + 36.90000000000004, + 36.95000000000004, + 37.000000000000036, + 37.05000000000003, + 37.10000000000003, + 37.15000000000003, + 37.200000000000024, + 37.25000000000002, + 37.30000000000002, + 37.350000000000016, + 37.40000000000001, + 37.45000000000001, + 37.50000000000001, + 37.550000000000004, + 37.6, + 37.65, + 37.699999999999996, + 37.74999999999999, + 37.79999999999999, + 37.84999999999999, + 37.899999999999984, + 37.94999999999998, + 37.99999999999998, + 38.049999999999976, + 38.09999999999997, + 38.14999999999997, + 38.19999999999997, + 38.249999999999964, + 38.29999999999996, + 38.34999999999996, + 38.399999999999956, + 38.44999999999995, + 38.49999999999995, + 38.54999999999995, + 38.599999999999945, + 38.64999999999994, + 38.69999999999994, + 38.749999999999936, + 38.79999999999993, + 38.84999999999993, + 38.89999999999993, + 38.949999999999925, + 38.99999999999992, + 39.04999999999992, + 39.099999999999916, + 39.14999999999991, + 39.19999999999991, + 39.24999999999991, + 39.299999999999905, + 39.3499999999999, + 39.3999999999999, + 39.449999999999896, + 39.49999999999989, + 39.54999999999989, + 39.59999999999989, + 39.649999999999885, + 39.69999999999988, + 39.74999999999988, + 39.799999999999876, + 39.84999999999987, + 39.89999999999987, + 39.94999999999987, + 39.999999999999865, + 40.04999999999986, + 40.09999999999986, + 40.14999999999986, + 40.199999999999854, + 40.24999999999985, + 40.29999999999985, + 40.349999999999845, + 40.39999999999984, + 40.44999999999984, + 40.49999999999984, + 40.549999999999834, + 40.59999999999983, + 40.64999999999983, + 40.699999999999825, + 40.74999999999982, + 40.79999999999982, + 40.84999999999982, + 40.899999999999814, + 40.94999999999981, + 40.99999999999981, + 41.049999999999805, + 41.0999999999998, + 41.1499999999998, + 41.1999999999998, + 41.249999999999794, + 41.29999999999979, + 41.34999999999979, + 41.399999999999785, + 41.44999999999978, + 41.49999999999978, + 41.54999999999978, + 41.599999999999774, + 41.64999999999977, + 41.69999999999977, + 41.749999999999766, + 41.79999999999976, + 41.84999999999976, + 41.89999999999976, + 41.949999999999754, + 41.99999999999975, + 42.04999999999975, + 42.099999999999746, + 42.14999999999974, + 42.19999999999974, + 42.24999999999974, + 42.299999999999734, + 42.34999999999973, + 42.39999999999973, + 42.449999999999726, + 42.49999999999972, + 42.54999999999972, + 42.59999999999972, + 42.649999999999714, + 42.69999999999971, + 42.74999999999971, + 42.799999999999706, + 42.8499999999997, + 42.8999999999997, + 42.9499999999997, + 42.999999999999694, + 43.04999999999969, + 43.09999999999969, + 43.149999999999686, + 43.19999999999968, + 43.24999999999968, + 43.29999999999968, + 43.349999999999675, + 43.39999999999967, + 43.44999999999967, + 43.499999999999666, + 43.54999999999966, + 43.59999999999966, + 43.64999999999966, + 43.699999999999655, + 43.74999999999965, + 43.79999999999965, + 43.849999999999646, + 43.89999999999964, + 43.94999999999964, + 43.99999999999964, + 44.049999999999635, + 44.09999999999963, + 44.14999999999963, + 44.199999999999626, + 44.24999999999962, + 44.29999999999962, + 44.34999999999962, + 44.399999999999615, + 44.44999999999961, + 44.49999999999961, + 44.549999999999606, + 44.5999999999996, + 44.6499999999996, + 44.6999999999996, + 44.749999999999595, + 44.79999999999959, + 44.84999999999959, + 44.89999999999959, + 44.949999999999584, + 44.99999999999958, + 45.04999999999958, + 45.099999999999575, + 45.14999999999957, + 45.19999999999957, + 45.24999999999957, + 45.299999999999564, + 45.34999999999956, + 45.39999999999956, + 45.449999999999555, + 45.49999999999955, + 45.54999999999955, + 45.59999999999955, + 45.649999999999544, + 45.69999999999954, + 45.74999999999954, + 45.799999999999535, + 45.84999999999953, + 45.89999999999953, + 45.94999999999953, + 45.999999999999524, + 46.04999999999952, + 46.09999999999952, + 46.149999999999515, + 46.19999999999951, + 46.24999999999951, + 46.29999999999951, + 46.349999999999504, + 46.3999999999995, + 46.4499999999995, + 46.499999999999496, + 46.54999999999949, + 46.59999999999949, + 46.64999999999949, + 46.699999999999484, + 46.74999999999948, + 46.79999999999948, + 46.849999999999476, + 46.89999999999947, + 46.94999999999947, + 46.99999999999947, + 47.049999999999464, + 47.09999999999946, + 47.14999999999946, + 47.199999999999456, + 47.24999999999945, + 47.29999999999945, + 47.34999999999945, + 47.399999999999444, + 47.44999999999944, + 47.49999999999944, + 47.549999999999436, + 47.59999999999943, + 47.64999999999943, + 47.69999999999943, + 47.749999999999424, + 47.79999999999942, + 47.84999999999942, + 47.899999999999416, + 47.94999999999941, + 47.99999999999941, + 48.04999999999941, + 48.099999999999405, + 48.1499999999994, + 48.1999999999994, + 48.249999999999396, + 48.29999999999939, + 48.34999999999939, + 48.39999999999939, + 48.449999999999385, + 48.49999999999938, + 48.54999999999938, + 48.599999999999376, + 48.64999999999937, + 48.69999999999937, + 48.74999999999937, + 48.799999999999365, + 48.84999999999936, + 48.89999999999936, + 48.949999999999356, + 48.99999999999935, + 49.04999999999935, + 49.09999999999935, + 49.149999999999345, + 49.19999999999934, + 49.24999999999934, + 49.299999999999336, + 49.34999999999933, + 49.39999999999933, + 49.44999999999933, + 49.499999999999325, + 49.54999999999932, + 49.59999999999932, + 49.64999999999932, + 49.699999999999314, + 49.74999999999931, + 49.79999999999931, + 49.849999999999305, + 49.8999999999993, + 49.9499999999993, + 49.9999999999993, + 50.049999999999294, + 50.09999999999929, + 50.14999999999929, + 50.199999999999285, + 50.24999999999928, + 50.29999999999928, + 50.34999999999928, + 50.399999999999274, + 50.44999999999927, + 50.49999999999927, + 50.549999999999265, + 50.59999999999926, + 50.64999999999926, + 50.69999999999926, + 50.749999999999254, + 50.79999999999925, + 50.84999999999925, + 50.899999999999245, + 50.94999999999924, + 50.99999999999924, + 51.04999999999924, + 51.099999999999234, + 51.14999999999923, + 51.19999999999923, + 51.249999999999226, + 51.29999999999922, + 51.34999999999922, + 51.39999999999922, + 51.449999999999214, + 51.49999999999921, + 51.54999999999921, + 51.599999999999206, + 51.6499999999992, + 51.6999999999992, + 51.7499999999992, + 51.799999999999194, + 51.84999999999919, + 51.89999999999919, + 51.949999999999186, + 51.99999999999918, + 52.04999999999918, + 52.09999999999918, + 52.149999999999174, + 52.19999999999917, + 52.24999999999917, + 52.299999999999166, + 52.34999999999916, + 52.39999999999916, + 52.44999999999916, + 52.499999999999154, + 52.54999999999915, + 52.59999999999915, + 52.649999999999146, + 52.69999999999914, + 52.74999999999914, + 52.79999999999914, + 52.849999999999135, + 52.89999999999913, + 52.94999999999913, + 52.999999999999126, + 53.04999999999912, + 53.09999999999912, + 53.14999999999912, + 53.199999999999115, + 53.24999999999911, + 53.29999999999911, + 53.349999999999106, + 53.3999999999991, + 53.4499999999991, + 53.4999999999991, + 53.549999999999095, + 53.59999999999909, + 53.64999999999909, + 53.699999999999086, + 53.74999999999908, + 53.79999999999908, + 53.84999999999908, + 53.899999999999075, + 53.94999999999907, + 53.99999999999907, + 54.049999999999066, + 54.09999999999906, + 54.14999999999906, + 54.19999999999906, + 54.249999999999055, + 54.29999999999905, + 54.34999999999905, + 54.39999999999905, + 54.449999999999044, + 54.49999999999904, + 54.54999999999904, + 54.599999999999035, + 54.64999999999903, + 54.69999999999903, + 54.74999999999903, + 54.799999999999024, + 54.84999999999902, + 54.89999999999902, + 54.949999999999015, + 54.99999999999901, + 55.04999999999901, + 55.09999999999901, + 55.149999999999004, + 55.199999999999, + 55.249999999999, + 55.299999999998995, + 55.34999999999899, + 55.39999999999899, + 55.44999999999899, + 55.499999999998984, + 55.54999999999898, + 55.59999999999898, + 55.649999999998975, + 55.69999999999897, + 55.74999999999897, + 55.79999999999897, + 55.849999999998964, + 55.89999999999896, + 55.94999999999896, + 55.999999999998956, + 56.04999999999895, + 56.09999999999895, + 56.14999999999895, + 56.199999999998944, + 56.24999999999894, + 56.29999999999894, + 56.349999999998936, + 56.39999999999893, + 56.44999999999893, + 56.49999999999893, + 56.549999999998924, + 56.59999999999892, + 56.64999999999892, + 56.699999999998916, + 56.74999999999891, + 56.79999999999891, + 56.84999999999891, + 56.899999999998904, + 56.9499999999989, + 56.9999999999989, + 57.049999999998896, + 57.09999999999889, + 57.14999999999889, + 57.19999999999889, + 57.249999999998884, + 57.29999999999888, + 57.34999999999888, + 57.399999999998876, + 57.44999999999887, + 57.49999999999887, + 57.54999999999887, + 57.599999999998865, + 57.64999999999886, + 57.69999999999886, + 57.749999999998856, + 57.79999999999885, + 57.84999999999885, + 57.89999999999885, + 57.949999999998845, + 57.99999999999884, + 58.04999999999884, + 58.099999999998836, + 58.14999999999883, + 58.19999999999883, + 58.24999999999883, + 58.299999999998825, + 58.34999999999882, + 58.39999999999882, + 58.449999999998816, + 58.49999999999881, + 58.54999999999881, + 58.59999999999881, + 58.649999999998805, + 58.6999999999988, + 58.7499999999988, + 58.799999999998796, + 58.84999999999879, + 58.89999999999879, + 58.94999999999879, + 58.999999999998785, + 59.04999999999878, + 59.09999999999878, + 59.149999999998776, + 59.199999999998774, + 59.24999999999877, + 59.29999999999877, + 59.349999999998765, + 59.39999999999876, + 59.44999999999876, + 59.49999999999876, + 59.549999999998754, + 59.59999999999875, + 59.64999999999875, + 59.699999999998745, + 59.74999999999874, + 59.79999999999874, + 59.84999999999874, + 59.899999999998734, + 59.94999999999873, + 59.99999999999873, + 60.049999999998725, + 60.09999999999872, + 60.14999999999872, + 60.19999999999872, + 60.249999999998714, + 60.29999999999871, + 60.34999999999871, + 60.399999999998705, + 60.4499999999987, + 60.4999999999987, + 60.5499999999987, + 60.599999999998694, + 60.64999999999869, + 60.69999999999869, + 60.749999999998685, + 60.79999999999868, + 60.84999999999868, + 60.89999999999868, + 60.949999999998674, + 60.99999999999867, + 61.04999999999867, + 61.099999999998666, + 61.14999999999866, + 61.19999999999866, + 61.24999999999866, + 61.299999999998654, + 61.34999999999865, + 61.39999999999865, + 61.449999999998646, + 61.49999999999864, + 61.54999999999864, + 61.59999999999864, + 61.649999999998634, + 61.69999999999863, + 61.74999999999863, + 61.799999999998626, + 61.84999999999862, + 61.89999999999862, + 61.94999999999862, + 61.999999999998614, + 62.04999999999861, + 62.09999999999861, + 62.149999999998606, + 62.1999999999986, + 62.2499999999986, + 62.2999999999986, + 62.349999999998595, + 62.39999999999859, + 62.44999999999859, + 62.499999999998586, + 62.54999999999858, + 62.59999999999858, + 62.64999999999858, + 62.699999999998575, + 62.74999999999857, + 62.79999999999857, + 62.849999999998566, + 62.89999999999856, + 62.94999999999856, + 62.99999999999856, + 63.049999999998555, + 63.09999999999855, + 63.14999999999855, + 63.199999999998546, + 63.24999999999854, + 63.29999999999854, + 63.34999999999854, + 63.399999999998535, + 63.44999999999853, + 63.49999999999853, + 63.549999999998526, + 63.59999999999852, + 63.64999999999852, + 63.69999999999852, + 63.749999999998515, + 63.79999999999851, + 63.84999999999851, + 63.899999999998506, + 63.949999999998504, + 63.9999999999985, + 64.0499999999985, + 64.0999999999985, + 64.1499999999985, + 64.1999999999985, + 64.2499999999985, + 64.29999999999849, + 64.34999999999849, + 64.39999999999849, + 64.44999999999848, + 64.49999999999848, + 64.54999999999848, + 64.59999999999847, + 64.64999999999847, + 64.69999999999847, + 64.74999999999847, + 64.79999999999846, + 64.84999999999846, + 64.89999999999846, + 64.94999999999845, + 64.99999999999845, + 65.04999999999845, + 65.09999999999845, + 65.14999999999844, + 65.19999999999844, + 65.24999999999844, + 65.29999999999843, + 65.34999999999843, + 65.39999999999843, + 65.44999999999843, + 65.49999999999842, + 65.54999999999842, + 65.59999999999842, + 65.64999999999841, + 65.69999999999841, + 65.74999999999841, + 65.7999999999984, + 65.8499999999984, + 65.8999999999984, + 65.9499999999984, + 65.9999999999984, + 66.04999999999839, + 66.09999999999839, + 66.14999999999839, + 66.19999999999838, + 66.24999999999838, + 66.29999999999838, + 66.34999999999837, + 66.39999999999837, + 66.44999999999837, + 66.49999999999837, + 66.54999999999836, + 66.59999999999836, + 66.64999999999836, + 66.69999999999835, + 66.74999999999835, + 66.79999999999835, + 66.84999999999835, + 66.89999999999834, + 66.94999999999834, + 66.99999999999834, + 67.04999999999833, + 67.09999999999833, + 67.14999999999833, + 67.19999999999833, + 67.24999999999832, + 67.29999999999832, + 67.34999999999832, + 67.39999999999831, + 67.44999999999831, + 67.49999999999831, + 67.5499999999983, + 67.5999999999983, + 67.6499999999983, + 67.6999999999983, + 67.7499999999983, + 67.79999999999829, + 67.84999999999829, + 67.89999999999829, + 67.94999999999828, + 67.99999999999828, + 68.04999999999828, + 68.09999999999827, + 68.14999999999827, + 68.19999999999827, + 68.24999999999827, + 68.29999999999826, + 68.34999999999826, + 68.39999999999826, + 68.44999999999825, + 68.49999999999825, + 68.54999999999825, + 68.59999999999825, + 68.64999999999824, + 68.69999999999824, + 68.74999999999824, + 68.79999999999824, + 68.84999999999823, + 68.89999999999823, + 68.94999999999823, + 68.99999999999822, + 69.04999999999822, + 69.09999999999822, + 69.14999999999822, + 69.19999999999821, + 69.24999999999821, + 69.2999999999982, + 69.3499999999982, + 69.3999999999982, + 69.4499999999982, + 69.4999999999982, + 69.54999999999819, + 69.59999999999819, + 69.64999999999819, + 69.69999999999818, + 69.74999999999818, + 69.79999999999818, + 69.84999999999818, + 69.89999999999817, + 69.94999999999817, + 69.99999999999817, + 70.04999999999816, + 70.09999999999816, + 70.14999999999816, + 70.19999999999816, + 70.24999999999815, + 70.29999999999815, + 70.34999999999815, + 70.39999999999814, + 70.44999999999814, + 70.49999999999814, + 70.54999999999814, + 70.59999999999813, + 70.64999999999813, + 70.69999999999813, + 70.74999999999812, + 70.79999999999812, + 70.84999999999812, + 70.89999999999812, + 70.94999999999811, + 70.99999999999811, + 71.04999999999811, + 71.0999999999981, + 71.1499999999981, + 71.1999999999981, + 71.2499999999981, + 71.2999999999981, + 71.34999999999809, + 71.39999999999809, + 71.44999999999808, + 71.49999999999808, + 71.54999999999808, + 71.59999999999808, + 71.64999999999807, + 71.69999999999807, + 71.74999999999807, + 71.79999999999806, + 71.84999999999806, + 71.89999999999806, + 71.94999999999806, + 71.99999999999805, + 72.04999999999805, + 72.09999999999805, + 72.14999999999804, + 72.19999999999804, + 72.24999999999804, + 72.29999999999804, + 72.34999999999803, + 72.39999999999803, + 72.44999999999803, + 72.49999999999802, + 72.54999999999802, + 72.59999999999802, + 72.64999999999802, + 72.69999999999801, + 72.74999999999801, + 72.79999999999801, + 72.849999999998, + 72.899999999998, + 72.949999999998, + 72.999999999998, + 73.049999999998, + 73.09999999999799, + 73.14999999999799, + 73.19999999999798, + 73.24999999999798, + 73.29999999999798, + 73.34999999999798, + 73.39999999999797, + 73.44999999999797, + 73.49999999999797, + 73.54999999999797, + 73.59999999999796, + 73.64999999999796, + 73.69999999999796, + 73.74999999999795, + 73.79999999999795, + 73.84999999999795, + 73.89999999999795, + 73.94999999999794, + 73.99999999999794, + 74.04999999999794, + 74.09999999999793, + 74.14999999999793, + 74.19999999999793, + 74.24999999999793, + 74.29999999999792, + 74.34999999999792, + 74.39999999999792, + 74.44999999999791, + 74.49999999999791, + 74.54999999999791, + 74.5999999999979, + 74.6499999999979, + 74.6999999999979, + 74.7499999999979, + 74.7999999999979, + 74.84999999999789, + 74.89999999999789, + 74.94999999999789, + 74.99999999999788, + 75.04999999999788, + 75.09999999999788, + 75.14999999999787, + 75.19999999999787, + 75.24999999999787, + 75.29999999999787, + 75.34999999999786, + 75.39999999999786, + 75.44999999999786, + 75.49999999999785, + 75.54999999999785, + 75.59999999999785, + 75.64999999999785, + 75.69999999999784, + 75.74999999999784, + 75.79999999999784, + 75.84999999999783, + 75.89999999999783, + 75.94999999999783, + 75.99999999999783, + 76.04999999999782, + 76.09999999999782, + 76.14999999999782, + 76.19999999999781, + 76.24999999999781, + 76.29999999999781, + 76.3499999999978, + 76.3999999999978, + 76.4499999999978, + 76.4999999999978, + 76.5499999999978, + 76.59999999999779, + 76.64999999999779, + 76.69999999999779, + 76.74999999999778, + 76.79999999999778, + 76.84999999999778, + 76.89999999999777, + 76.94999999999777, + 76.99999999999777, + 77.04999999999777, + 77.09999999999776, + 77.14999999999776, + 77.19999999999776, + 77.24999999999775, + 77.29999999999775, + 77.34999999999775, + 77.39999999999775, + 77.44999999999774, + 77.49999999999774, + 77.54999999999774, + 77.59999999999773, + 77.64999999999773, + 77.69999999999773, + 77.74999999999773, + 77.79999999999772, + 77.84999999999772, + 77.89999999999772, + 77.94999999999771, + 77.99999999999771, + 78.04999999999771, + 78.0999999999977, + 78.1499999999977, + 78.1999999999977, + 78.2499999999977, + 78.2999999999977, + 78.34999999999769, + 78.39999999999769, + 78.44999999999769, + 78.49999999999768, + 78.54999999999768, + 78.59999999999768, + 78.64999999999768, + 78.69999999999767, + 78.74999999999767, + 78.79999999999767, + 78.84999999999766, + 78.89999999999766, + 78.94999999999766, + 78.99999999999766, + 79.04999999999765, + 79.09999999999765, + 79.14999999999765, + 79.19999999999764, + 79.24999999999764, + 79.29999999999764, + 79.34999999999764, + 79.39999999999763, + 79.44999999999763, + 79.49999999999763, + 79.54999999999762, + 79.59999999999762, + 79.64999999999762, + 79.69999999999762, + 79.74999999999761, + 79.79999999999761, + 79.8499999999976, + 79.8999999999976, + 79.9499999999976, + 79.9999999999976, + 80.0499999999976, + 80.09999999999759, + 80.14999999999759, + 80.19999999999759, + 80.24999999999758, + 80.29999999999758, + 80.34999999999758, + 80.39999999999758, + 80.44999999999757, + 80.49999999999757, + 80.54999999999757, + 80.59999999999756, + 80.64999999999756, + 80.69999999999756, + 80.74999999999756, + 80.79999999999755, + 80.84999999999755, + 80.89999999999755, + 80.94999999999754, + 80.99999999999754, + 81.04999999999754, + 81.09999999999754, + 81.14999999999753, + 81.19999999999753, + 81.24999999999753, + 81.29999999999752, + 81.34999999999752, + 81.39999999999752, + 81.44999999999752, + 81.49999999999751, + 81.54999999999751, + 81.59999999999751, + 81.6499999999975, + 81.6999999999975, + 81.7499999999975, + 81.7999999999975, + 81.8499999999975, + 81.89999999999749, + 81.94999999999749, + 81.99999999999748, + 82.04999999999748, + 82.09999999999748, + 82.14999999999748, + 82.19999999999747, + 82.24999999999747, + 82.29999999999747, + 82.34999999999746, + 82.39999999999746, + 82.44999999999746, + 82.49999999999746, + 82.54999999999745, + 82.59999999999745, + 82.64999999999745, + 82.69999999999744, + 82.74999999999744, + 82.79999999999744, + 82.84999999999744, + 82.89999999999743, + 82.94999999999743, + 82.99999999999743, + 83.04999999999742, + 83.09999999999742, + 83.14999999999742, + 83.19999999999742, + 83.24999999999741, + 83.29999999999741, + 83.34999999999741, + 83.3999999999974, + 83.4499999999974, + 83.4999999999974, + 83.5499999999974, + 83.5999999999974, + 83.64999999999739, + 83.69999999999739, + 83.74999999999739, + 83.79999999999738, + 83.84999999999738, + 83.89999999999738, + 83.94999999999737, + 83.99999999999737, + 84.04999999999737, + 84.09999999999737, + 84.14999999999736, + 84.19999999999736, + 84.24999999999736, + 84.29999999999735, + 84.34999999999735, + 84.39999999999735, + 84.44999999999735, + 84.49999999999734, + 84.54999999999734, + 84.59999999999734, + 84.64999999999733, + 84.69999999999733, + 84.74999999999733, + 84.79999999999733, + 84.84999999999732, + 84.89999999999732, + 84.94999999999732, + 84.99999999999731, + 85.04999999999731, + 85.09999999999731, + 85.1499999999973, + 85.1999999999973, + 85.2499999999973, + 85.2999999999973, + 85.3499999999973, + 85.39999999999729, + 85.44999999999729, + 85.49999999999729, + 85.54999999999728, + 85.59999999999728, + 85.64999999999728, + 85.69999999999727, + 85.74999999999727, + 85.79999999999727, + 85.84999999999727, + 85.89999999999726, + 85.94999999999726, + 85.99999999999726, + 86.04999999999725, + 86.09999999999725, + 86.14999999999725, + 86.19999999999725, + 86.24999999999724, + 86.29999999999724, + 86.34999999999724, + 86.39999999999723, + 86.44999999999723, + 86.49999999999723, + 86.54999999999723, + 86.59999999999722, + 86.64999999999722, + 86.69999999999722, + 86.74999999999721, + 86.79999999999721, + 86.84999999999721, + 86.8999999999972, + 86.9499999999972, + 86.9999999999972, + 87.0499999999972, + 87.0999999999972, + 87.14999999999719, + 87.19999999999719, + 87.24999999999719, + 87.29999999999718, + 87.34999999999718, + 87.39999999999718, + 87.44999999999717, + 87.49999999999717, + 87.54999999999717, + 87.59999999999717, + 87.64999999999716, + 87.69999999999716, + 87.74999999999716, + 87.79999999999715, + 87.84999999999715, + 87.89999999999715, + 87.94999999999715, + 87.99999999999714, + 88.04999999999714, + 88.09999999999714, + 88.14999999999714, + 88.19999999999713, + 88.24999999999713, + 88.29999999999713, + 88.34999999999712, + 88.39999999999712, + 88.44999999999712, + 88.49999999999712, + 88.54999999999711, + 88.59999999999711, + 88.6499999999971, + 88.6999999999971, + 88.7499999999971, + 88.7999999999971, + 88.8499999999971, + 88.89999999999709, + 88.94999999999709, + 88.99999999999709, + 89.04999999999708, + 89.09999999999708, + 89.14999999999708, + 89.19999999999708, + 89.24999999999707, + 89.29999999999707, + 89.34999999999707, + 89.39999999999706, + 89.44999999999706, + 89.49999999999706, + 89.54999999999706, + 89.59999999999705, + 89.64999999999705, + 89.69999999999705, + 89.74999999999704, + 89.79999999999704, + 89.84999999999704, + 89.89999999999704, + 89.94999999999703, + 89.99999999999703, + 90.04999999999703, + 90.09999999999702, + 90.14999999999702, + 90.19999999999702, + 90.24999999999702, + 90.29999999999701, + 90.34999999999701, + 90.39999999999701, + 90.449999999997, + 90.499999999997, + 90.549999999997, + 90.599999999997, + 90.649999999997, + 90.69999999999699, + 90.74999999999699, + 90.79999999999698, + 90.84999999999698, + 90.89999999999698, + 90.94999999999698, + 90.99999999999697, + 91.04999999999697, + 91.09999999999697, + 91.14999999999696, + 91.19999999999696, + 91.24999999999696, + 91.29999999999696, + 91.34999999999695, + 91.39999999999695, + 91.44999999999695, + 91.49999999999694, + 91.54999999999694, + 91.59999999999694, + 91.64999999999694, + 91.69999999999693, + 91.74999999999693, + 91.79999999999693, + 91.84999999999692, + 91.89999999999692, + 91.94999999999692, + 91.99999999999692, + 92.04999999999691, + 92.09999999999691, + 92.14999999999691, + 92.1999999999969, + 92.2499999999969, + 92.2999999999969, + 92.3499999999969, + 92.3999999999969, + 92.44999999999689, + 92.49999999999689, + 92.54999999999688, + 92.59999999999688, + 92.64999999999688, + 92.69999999999688, + 92.74999999999687, + 92.79999999999687, + 92.84999999999687, + 92.89999999999687, + 92.94999999999686, + 92.99999999999686, + 93.04999999999686, + 93.09999999999685, + 93.14999999999685, + 93.19999999999685, + 93.24999999999685, + 93.29999999999684, + 93.34999999999684, + 93.39999999999684, + 93.44999999999683, + 93.49999999999683, + 93.54999999999683, + 93.59999999999683, + 93.64999999999682, + 93.69999999999682, + 93.74999999999682, + 93.79999999999681, + 93.84999999999681, + 93.89999999999681, + 93.9499999999968, + 93.9999999999968, + 94.0499999999968, + 94.0999999999968, + 94.1499999999968, + 94.19999999999679, + 94.24999999999679, + 94.29999999999679, + 94.34999999999678, + 94.39999999999678, + 94.44999999999678, + 94.49999999999677, + 94.54999999999677, + 94.59999999999677, + 94.64999999999677, + 94.69999999999676, + 94.74999999999676, + 94.79999999999676, + 94.84999999999675, + 94.89999999999675, + 94.94999999999675, + 94.99999999999675, + 95.04999999999674, + 95.09999999999674, + 95.14999999999674, + 95.19999999999673, + 95.24999999999673, + 95.29999999999673, + 95.34999999999673, + 95.39999999999672, + 95.44999999999672, + 95.49999999999672, + 95.54999999999671, + 95.59999999999671, + 95.64999999999671, + 95.6999999999967, + 95.7499999999967, + 95.7999999999967, + 95.8499999999967, + 95.8999999999967, + 95.94999999999669, + 95.99999999999669, + 96.04999999999669, + 96.09999999999668, + 96.14999999999668, + 96.19999999999668, + 96.24999999999667, + 96.29999999999667, + 96.34999999999667, + 96.39999999999667, + 96.44999999999666, + 96.49999999999666, + 96.54999999999666, + 96.59999999999665, + 96.64999999999665, + 96.69999999999665, + 96.74999999999665, + 96.79999999999664, + 96.84999999999664, + 96.89999999999664, + 96.94999999999663, + 96.99999999999663, + 97.04999999999663, + 97.09999999999663, + 97.14999999999662, + 97.19999999999662, + 97.24999999999662, + 97.29999999999661, + 97.34999999999661, + 97.39999999999661, + 97.4499999999966, + 97.4999999999966, + 97.5499999999966, + 97.5999999999966, + 97.6499999999966, + 97.69999999999659, + 97.74999999999659, + 97.79999999999659, + 97.84999999999658, + 97.89999999999658, + 97.94999999999658, + 97.99999999999658, + 98.04999999999657, + 98.09999999999657, + 98.14999999999657, + 98.19999999999656, + 98.24999999999656, + 98.29999999999656, + 98.34999999999656, + 98.39999999999655, + 98.44999999999655, + 98.49999999999655, + 98.54999999999654, + 98.59999999999654, + 98.64999999999654, + 98.69999999999654, + 98.74999999999653, + 98.79999999999653, + 98.84999999999653, + 98.89999999999652, + 98.94999999999652, + 98.99999999999652, + 99.04999999999652, + 99.09999999999651, + 99.14999999999651, + 99.1999999999965, + 99.2499999999965, + 99.2999999999965, + 99.3499999999965, + 99.3999999999965, + 99.44999999999649, + 99.49999999999649, + 99.54999999999649, + 99.59999999999648, + 99.64999999999648, + 99.69999999999648, + 99.74999999999648, + 99.79999999999647, + 99.84999999999647, + 99.89999999999647, + 99.94999999999646, + 99.99999999999646, + 100.04999999999646, + 100.09999999999646, + 100.14999999999645, + 100.19999999999645, + 100.24999999999645, + 100.29999999999644, + 100.34999999999644, + 100.39999999999644, + 100.44999999999644, + 100.49999999999643, + 100.54999999999643, + 100.59999999999643, + 100.64999999999642, + 100.69999999999642, + 100.74999999999642, + 100.79999999999642, + 100.84999999999641, + 100.89999999999641, + 100.94999999999641, + 100.9999999999964, + 101.0499999999964, + 101.0999999999964, + 101.1499999999964, + 101.1999999999964, + 101.24999999999639, + 101.29999999999639, + 101.34999999999638, + 101.39999999999638, + 101.44999999999638, + 101.49999999999638, + 101.54999999999637, + 101.59999999999637, + 101.64999999999637, + 101.69999999999636, + 101.74999999999636, + 101.79999999999636, + 101.84999999999636, + 101.89999999999635, + 101.94999999999635, + 101.99999999999635, + 102.04999999999634, + 102.09999999999634, + 102.14999999999634, + 102.19999999999634, + 102.24999999999633, + 102.29999999999633, + 102.34999999999633, + 102.39999999999633, + 102.44999999999632, + 102.49999999999632, + 102.54999999999632, + 102.59999999999631, + 102.64999999999631, + 102.69999999999631, + 102.7499999999963, + 102.7999999999963, + 102.8499999999963, + 102.8999999999963, + 102.9499999999963, + 102.99999999999629, + 103.04999999999629, + 103.09999999999629, + 103.14999999999628, + 103.19999999999628, + 103.24999999999628, + 103.29999999999627, + 103.34999999999627, + 103.39999999999627, + 103.44999999999627, + 103.49999999999626, + 103.54999999999626, + 103.59999999999626, + 103.64999999999625, + 103.69999999999625, + 103.74999999999625, + 103.79999999999625, + 103.84999999999624, + 103.89999999999624, + 103.94999999999624, + 103.99999999999623, + 104.04999999999623, + 104.09999999999623, + 104.14999999999623, + 104.19999999999622, + 104.24999999999622, + 104.29999999999622, + 104.34999999999621, + 104.39999999999621, + 104.44999999999621, + 104.4999999999962, + 104.5499999999962, + 104.5999999999962, + 104.6499999999962, + 104.6999999999962, + 104.74999999999619, + 104.79999999999619, + 104.84999999999619, + 104.89999999999618, + 104.94999999999618, + 104.99999999999618, + 105.04999999999617, + 105.09999999999617, + 105.14999999999617, + 105.19999999999617, + 105.24999999999616, + 105.29999999999616, + 105.34999999999616, + 105.39999999999615, + 105.44999999999615, + 105.49999999999615, + 105.54999999999615, + 105.59999999999614, + 105.64999999999614, + 105.69999999999614, + 105.74999999999613, + 105.79999999999613, + 105.84999999999613, + 105.89999999999613, + 105.94999999999612, + 105.99999999999612, + 106.04999999999612, + 106.09999999999611, + 106.14999999999611, + 106.19999999999611, + 106.2499999999961, + 106.2999999999961, + 106.3499999999961, + 106.3999999999961, + 106.4499999999961, + 106.49999999999609, + 106.54999999999609, + 106.59999999999609, + 106.64999999999608, + 106.69999999999608, + 106.74999999999608, + 106.79999999999607, + 106.84999999999607, + 106.89999999999607, + 106.94999999999607, + 106.99999999999606, + 107.04999999999606, + 107.09999999999606, + 107.14999999999606, + 107.19999999999605, + 107.24999999999605, + 107.29999999999605, + 107.34999999999604, + 107.39999999999604, + 107.44999999999604, + 107.49999999999604, + 107.54999999999603, + 107.59999999999603, + 107.64999999999603, + 107.69999999999602, + 107.74999999999602, + 107.79999999999602, + 107.84999999999602, + 107.89999999999601, + 107.94999999999601, + 107.999999999996, + 108.049999999996, + 108.099999999996, + 108.149999999996, + 108.199999999996, + 108.24999999999599, + 108.29999999999599, + 108.34999999999599, + 108.39999999999598, + 108.44999999999598, + 108.49999999999598, + 108.54999999999598, + 108.59999999999597, + 108.64999999999597, + 108.69999999999597, + 108.74999999999596, + 108.79999999999596, + 108.84999999999596, + 108.89999999999596, + 108.94999999999595, + 108.99999999999595, + 109.04999999999595, + 109.09999999999594, + 109.14999999999594, + 109.19999999999594, + 109.24999999999594, + 109.29999999999593, + 109.34999999999593, + 109.39999999999593, + 109.44999999999592, + 109.49999999999592, + 109.54999999999592, + 109.59999999999592, + 109.64999999999591, + 109.69999999999591, + 109.74999999999591, + 109.7999999999959, + 109.8499999999959, + 109.8999999999959, + 109.9499999999959, + 109.9999999999959, + 110.04999999999589, + 110.09999999999589, + 110.14999999999588, + 110.19999999999588, + 110.24999999999588, + 110.29999999999588, + 110.34999999999587, + 110.39999999999587, + 110.44999999999587, + 110.49999999999586, + 110.54999999999586, + 110.59999999999586, + 110.64999999999586, + 110.69999999999585, + 110.74999999999585, + 110.79999999999585, + 110.84999999999584, + 110.89999999999584, + 110.94999999999584, + 110.99999999999584, + 111.04999999999583, + 111.09999999999583, + 111.14999999999583, + 111.19999999999582, + 111.24999999999582, + 111.29999999999582, + 111.34999999999582, + 111.39999999999581, + 111.44999999999581, + 111.49999999999581, + 111.5499999999958, + 111.5999999999958, + 111.6499999999958, + 111.6999999999958, + 111.7499999999958, + 111.79999999999579, + 111.84999999999579, + 111.89999999999579, + 111.94999999999578, + 111.99999999999578, + 112.04999999999578, + 112.09999999999577, + 112.14999999999577, + 112.19999999999577, + 112.24999999999577, + 112.29999999999576, + 112.34999999999576, + 112.39999999999576, + 112.44999999999575, + 112.49999999999575, + 112.54999999999575, + 112.59999999999575, + 112.64999999999574, + 112.69999999999574, + 112.74999999999574, + 112.79999999999573, + 112.84999999999573, + 112.89999999999573, + 112.94999999999573, + 112.99999999999572, + 113.04999999999572, + 113.09999999999572, + 113.14999999999571, + 113.19999999999571, + 113.24999999999571, + 113.2999999999957, + 113.3499999999957, + 113.3999999999957, + 113.4499999999957, + 113.4999999999957, + 113.54999999999569, + 113.59999999999569, + 113.64999999999569, + 113.69999999999568, + 113.74999999999568, + 113.79999999999568, + 113.84999999999567, + 113.89999999999567, + 113.94999999999567, + 113.99999999999567, + 114.04999999999566, + 114.09999999999566, + 114.14999999999566, + 114.19999999999565, + 114.24999999999565, + 114.29999999999565, + 114.34999999999565, + 114.39999999999564, + 114.44999999999564, + 114.49999999999564, + 114.54999999999563, + 114.59999999999563, + 114.64999999999563, + 114.69999999999563, + 114.74999999999562, + 114.79999999999562, + 114.84999999999562, + 114.89999999999561, + 114.94999999999561, + 114.99999999999561, + 115.0499999999956, + 115.0999999999956, + 115.1499999999956, + 115.1999999999956, + 115.2499999999956, + 115.29999999999559, + 115.34999999999559, + 115.39999999999559, + 115.44999999999558, + 115.49999999999558, + 115.54999999999558, + 115.59999999999557, + 115.64999999999557, + 115.69999999999557, + 115.74999999999557, + 115.79999999999556, + 115.84999999999556, + 115.89999999999556, + 115.94999999999555, + 115.99999999999555, + 116.04999999999555, + 116.09999999999555, + 116.14999999999554, + 116.19999999999554, + 116.24999999999554, + 116.29999999999553, + 116.34999999999553, + 116.39999999999553, + 116.44999999999553, + 116.49999999999552, + 116.54999999999552, + 116.59999999999552, + 116.64999999999552, + 116.69999999999551, + 116.74999999999551, + 116.7999999999955, + 116.8499999999955, + 116.8999999999955, + 116.9499999999955, + 116.9999999999955, + 117.04999999999549, + 117.09999999999549, + 117.14999999999549, + 117.19999999999548, + 117.24999999999548, + 117.29999999999548, + 117.34999999999548, + 117.39999999999547, + 117.44999999999547, + 117.49999999999547, + 117.54999999999546, + 117.59999999999546, + 117.64999999999546, + 117.69999999999546, + 117.74999999999545, + 117.79999999999545, + 117.84999999999545, + 117.89999999999544, + 117.94999999999544, + 117.99999999999544, + 118.04999999999544, + 118.09999999999543, + 118.14999999999543, + 118.19999999999543, + 118.24999999999542, + 118.29999999999542, + 118.34999999999542, + 118.39999999999542, + 118.44999999999541, + 118.49999999999541, + 118.5499999999954, + 118.5999999999954, + 118.6499999999954, + 118.6999999999954, + 118.7499999999954, + 118.79999999999539, + 118.84999999999539, + 118.89999999999539, + 118.94999999999538, + 118.99999999999538, + 119.04999999999538, + 119.09999999999538, + 119.14999999999537, + 119.19999999999537, + 119.24999999999537, + 119.29999999999536, + 119.34999999999536, + 119.39999999999536, + 119.44999999999536, + 119.49999999999535, + 119.54999999999535, + 119.59999999999535, + 119.64999999999534, + 119.69999999999534, + 119.74999999999534, + 119.79999999999534, + 119.84999999999533, + 119.89999999999533, + 119.94999999999533, + 119.99999999999532, + 120.04999999999532, + 120.09999999999532, + 120.14999999999532, + 120.19999999999531, + 120.24999999999531, + 120.29999999999531, + 120.3499999999953, + 120.3999999999953, + 120.4499999999953, + 120.4999999999953, + 120.5499999999953, + 120.59999999999529, + 120.64999999999529, + 120.69999999999528, + 120.74999999999528, + 120.79999999999528, + 120.84999999999528, + 120.89999999999527, + 120.94999999999527, + 120.99999999999527, + 121.04999999999526, + 121.09999999999526, + 121.14999999999526, + 121.19999999999526, + 121.24999999999525, + 121.29999999999525, + 121.34999999999525, + 121.39999999999525, + 121.44999999999524, + 121.49999999999524, + 121.54999999999524, + 121.59999999999523, + 121.64999999999523, + 121.69999999999523, + 121.74999999999523, + 121.79999999999522, + 121.84999999999522, + 121.89999999999522, + 121.94999999999521, + 121.99999999999521, + 122.04999999999521, + 122.0999999999952, + 122.1499999999952, + 122.1999999999952, + 122.2499999999952, + 122.2999999999952, + 122.34999999999519, + 122.39999999999519, + 122.44999999999519, + 122.49999999999518, + 122.54999999999518, + 122.59999999999518, + 122.64999999999517, + 122.69999999999517, + 122.74999999999517, + 122.79999999999517, + 122.84999999999516, + 122.89999999999516, + 122.94999999999516, + 122.99999999999515, + 123.04999999999515, + 123.09999999999515, + 123.14999999999515, + 123.19999999999514, + 123.24999999999514, + 123.29999999999514, + 123.34999999999513, + 123.39999999999513, + 123.44999999999513, + 123.49999999999513, + 123.54999999999512, + 123.59999999999512, + 123.64999999999512, + 123.69999999999511, + 123.74999999999511, + 123.79999999999511, + 123.8499999999951, + 123.8999999999951, + 123.9499999999951, + 123.9999999999951, + 124.0499999999951, + 124.09999999999509, + 124.14999999999509, + 124.19999999999509, + 124.24999999999508, + 124.29999999999508, + 124.34999999999508, + 124.39999999999507, + 124.44999999999507, + 124.49999999999507, + 124.54999999999507, + 124.59999999999506, + 124.64999999999506, + 124.69999999999506, + 124.74999999999505, + 124.79999999999505, + 124.84999999999505, + 124.89999999999505, + 124.94999999999504, + 124.99999999999504, + 125.04999999999504, + 125.09999999999503, + 125.14999999999503, + 125.19999999999503, + 125.24999999999503, + 125.29999999999502, + 125.34999999999502, + 125.39999999999502, + 125.44999999999501, + 125.49999999999501, + 125.54999999999501, + 125.599999999995, + 125.649999999995, + 125.699999999995, + 125.749999999995, + 125.799999999995, + 125.84999999999499, + 125.89999999999499, + 125.94999999999499, + 125.99999999999498, + 126.04999999999498, + 126.09999999999498, + 126.14999999999498, + 126.19999999999497, + 126.24999999999497, + 126.29999999999497, + 126.34999999999496, + 126.39999999999496, + 126.44999999999496, + 126.49999999999496, + 126.54999999999495, + 126.59999999999495, + 126.64999999999495, + 126.69999999999494, + 126.74999999999494, + 126.79999999999494, + 126.84999999999494, + 126.89999999999493, + 126.94999999999493, + 126.99999999999493, + 127.04999999999492, + 127.09999999999492, + 127.14999999999492, + 127.19999999999492, + 127.24999999999491, + 127.29999999999491, + 127.3499999999949, + 127.3999999999949, + 127.4499999999949, + 127.4999999999949, + 127.5499999999949, + 127.59999999999489, + 127.64999999999489, + 127.69999999999489, + 127.74999999999488, + 127.79999999999488, + 127.84999999999488, + 127.89999999999488, + 127.94999999999487, + 127.99999999999487, + 128.04999999999487, + 128.09999999999488, + 128.1499999999949, + 128.1999999999949, + 128.2499999999949, + 128.29999999999492, + 128.34999999999494, + 128.39999999999495, + 128.44999999999496, + 128.49999999999497, + 128.54999999999498, + 128.599999999995, + 128.649999999995, + 128.69999999999501, + 128.74999999999503, + 128.79999999999504, + 128.84999999999505, + 128.89999999999506, + 128.94999999999507, + 128.99999999999508, + 129.0499999999951, + 129.0999999999951, + 129.14999999999512, + 129.19999999999513, + 129.24999999999514, + 129.29999999999515, + 129.34999999999516, + 129.39999999999517, + 129.44999999999519, + 129.4999999999952, + 129.5499999999952, + 129.59999999999522, + 129.64999999999523, + 129.69999999999524, + 129.74999999999525, + 129.79999999999526, + 129.84999999999528, + 129.8999999999953, + 129.9499999999953, + 129.9999999999953, + 130.04999999999532, + 130.09999999999533, + 130.14999999999534, + 130.19999999999536, + 130.24999999999537, + 130.29999999999538, + 130.3499999999954, + 130.3999999999954, + 130.4499999999954, + 130.49999999999542, + 130.54999999999544, + 130.59999999999545, + 130.64999999999546, + 130.69999999999547, + 130.74999999999548, + 130.7999999999955, + 130.8499999999955, + 130.89999999999552, + 130.94999999999553, + 130.99999999999554, + 131.04999999999555, + 131.09999999999556, + 131.14999999999557, + 131.19999999999558, + 131.2499999999956, + 131.2999999999956, + 131.34999999999562, + 131.39999999999563, + 131.44999999999564, + 131.49999999999565, + 131.54999999999566, + 131.59999999999567, + 131.64999999999569, + 131.6999999999957, + 131.7499999999957, + 131.79999999999572, + 131.84999999999573, + 131.89999999999574, + 131.94999999999575, + 131.99999999999577, + 132.04999999999578, + 132.0999999999958, + 132.1499999999958, + 132.1999999999958, + 132.24999999999582, + 132.29999999999583, + 132.34999999999584, + 132.39999999999586, + 132.44999999999587, + 132.49999999999588, + 132.5499999999959, + 132.5999999999959, + 132.6499999999959, + 132.69999999999592, + 132.74999999999594, + 132.79999999999595, + 132.84999999999596, + 132.89999999999597, + 132.94999999999598, + 132.999999999996, + 133.049999999996, + 133.09999999999602, + 133.14999999999603, + 133.19999999999604, + 133.24999999999605, + 133.29999999999606, + 133.34999999999607, + 133.39999999999608, + 133.4499999999961, + 133.4999999999961, + 133.54999999999612, + 133.59999999999613, + 133.64999999999614, + 133.69999999999615, + 133.74999999999616, + 133.79999999999617, + 133.8499999999962, + 133.8999999999962, + 133.9499999999962, + 133.99999999999622, + 134.04999999999623, + 134.09999999999624, + 134.14999999999625, + 134.19999999999627, + 134.24999999999628, + 134.2999999999963, + 134.3499999999963, + 134.3999999999963, + 134.44999999999632, + 134.49999999999633, + 134.54999999999634, + 134.59999999999636, + 134.64999999999637, + 134.69999999999638, + 134.7499999999964, + 134.7999999999964, + 134.8499999999964, + 134.89999999999642, + 134.94999999999644, + 134.99999999999645, + 135.04999999999646, + 135.09999999999647, + 135.14999999999648, + 135.1999999999965, + 135.2499999999965, + 135.29999999999652, + 135.34999999999653, + 135.39999999999654, + 135.44999999999655, + 135.49999999999656, + 135.54999999999657, + 135.59999999999658, + 135.6499999999966, + 135.6999999999966, + 135.74999999999662, + 135.79999999999663, + 135.84999999999664, + 135.89999999999665, + 135.94999999999666, + 135.99999999999667, + 136.0499999999967, + 136.0999999999967, + 136.1499999999967, + 136.19999999999672, + 136.24999999999673, + 136.29999999999674, + 136.34999999999675, + 136.39999999999677, + 136.44999999999678, + 136.4999999999968, + 136.5499999999968, + 136.5999999999968, + 136.64999999999682, + 136.69999999999683, + 136.74999999999685, + 136.79999999999686, + 136.84999999999687, + 136.89999999999688, + 136.9499999999969, + 136.9999999999969, + 137.0499999999969, + 137.09999999999692, + 137.14999999999694, + 137.19999999999695, + 137.24999999999696, + 137.29999999999697, + 137.34999999999698, + 137.399999999997, + 137.449999999997, + 137.49999999999702, + 137.54999999999703, + 137.59999999999704, + 137.64999999999705, + 137.69999999999706, + 137.74999999999707, + 137.79999999999708, + 137.8499999999971, + 137.8999999999971, + 137.94999999999712, + 137.99999999999713, + 138.04999999999714, + 138.09999999999715, + 138.14999999999716, + 138.19999999999717, + 138.2499999999972, + 138.2999999999972, + 138.3499999999972, + 138.39999999999722, + 138.44999999999723, + 138.49999999999724, + 138.54999999999725, + 138.59999999999727, + 138.64999999999728, + 138.6999999999973, + 138.7499999999973, + 138.7999999999973, + 138.84999999999732, + 138.89999999999733, + 138.94999999999735, + 138.99999999999736, + 139.04999999999737, + 139.09999999999738, + 139.1499999999974, + 139.1999999999974, + 139.2499999999974, + 139.29999999999742, + 139.34999999999744, + 139.39999999999745, + 139.44999999999746, + 139.49999999999747, + 139.54999999999748, + 139.5999999999975, + 139.6499999999975, + 139.69999999999752, + 139.74999999999753, + 139.79999999999754, + 139.84999999999755, + 139.89999999999756, + 139.94999999999757, + 139.99999999999758, + 140.0499999999976, + 140.0999999999976, + 140.14999999999762, + 140.19999999999763, + 140.24999999999764, + 140.29999999999765, + 140.34999999999766, + 140.39999999999768, + 140.4499999999977, + 140.4999999999977, + 140.5499999999977, + 140.59999999999772, + 140.64999999999773, + 140.69999999999774, + 140.74999999999775, + 140.79999999999777, + 140.84999999999778, + 140.8999999999978, + 140.9499999999978, + 140.9999999999978, + 141.04999999999782, + 141.09999999999783, + 141.14999999999785, + 141.19999999999786, + 141.24999999999787, + 141.29999999999788, + 141.3499999999979, + 141.3999999999979, + 141.4499999999979, + 141.49999999999793, + 141.54999999999794, + 141.59999999999795, + 141.64999999999796, + 141.69999999999797, + 141.74999999999798, + 141.799999999998, + 141.849999999998, + 141.89999999999802, + 141.94999999999803, + 141.99999999999804, + 142.04999999999805, + 142.09999999999806, + 142.14999999999807, + 142.19999999999808, + 142.2499999999981, + 142.2999999999981, + 142.34999999999812, + 142.39999999999813, + 142.44999999999814, + 142.49999999999815, + 142.54999999999816, + 142.59999999999818, + 142.6499999999982, + 142.6999999999982, + 142.7499999999982, + 142.79999999999822, + 142.84999999999823, + 142.89999999999824, + 142.94999999999825, + 142.99999999999827, + 143.04999999999828, + 143.0999999999983, + 143.1499999999983, + 143.1999999999983, + 143.24999999999832, + 143.29999999999833, + 143.34999999999835, + 143.39999999999836, + 143.44999999999837, + 143.49999999999838, + 143.5499999999984, + 143.5999999999984, + 143.6499999999984, + 143.69999999999843, + 143.74999999999844, + 143.79999999999845, + 143.84999999999846, + 143.89999999999847, + 143.94999999999848, + 143.9999999999985, + 144.0499999999985, + 144.09999999999852, + 144.14999999999853, + 144.19999999999854, + 144.24999999999855, + 144.29999999999856, + 144.34999999999857, + 144.39999999999858, + 144.4499999999986, + 144.4999999999986, + 144.54999999999862, + 144.59999999999863, + 144.64999999999864, + 144.69999999999865, + 144.74999999999866, + 144.79999999999868, + 144.8499999999987, + 144.8999999999987, + 144.9499999999987, + 144.99999999999872, + 145.04999999999873, + 145.09999999999874, + 145.14999999999876, + 145.19999999999877, + 145.24999999999878, + 145.2999999999988, + 145.3499999999988, + 145.3999999999988, + 145.44999999999882, + 145.49999999999883, + 145.54999999999885, + 145.59999999999886, + 145.64999999999887, + 145.69999999999888, + 145.7499999999989, + 145.7999999999989, + 145.84999999999891, + 145.89999999999893, + 145.94999999999894, + 145.99999999999895, + 146.04999999999896, + 146.09999999999897, + 146.14999999999898, + 146.199999999999, + 146.249999999999, + 146.29999999999902, + 146.34999999999903, + 146.39999999999904, + 146.44999999999905, + 146.49999999999906, + 146.54999999999907, + 146.59999999999908, + 146.6499999999991, + 146.6999999999991, + 146.74999999999912, + 146.79999999999913, + 146.84999999999914, + 146.89999999999915, + 146.94999999999916, + 146.99999999999918, + 147.0499999999992, + 147.0999999999992, + 147.1499999999992, + 147.19999999999922, + 147.24999999999923, + 147.29999999999924, + 147.34999999999926, + 147.39999999999927, + 147.44999999999928, + 147.4999999999993, + 147.5499999999993, + 147.5999999999993, + 147.64999999999932, + 147.69999999999933, + 147.74999999999935, + 147.79999999999936, + 147.84999999999937, + 147.89999999999938, + 147.9499999999994, + 147.9999999999994, + 148.04999999999941, + 148.09999999999943, + 148.14999999999944, + 148.19999999999945, + 148.24999999999946, + 148.29999999999947, + 148.34999999999948, + 148.3999999999995, + 148.4499999999995, + 148.49999999999952, + 148.54999999999953, + 148.59999999999954, + 148.64999999999955, + 148.69999999999956, + 148.74999999999957, + 148.79999999999959, + 148.8499999999996, + 148.8999999999996, + 148.94999999999962, + 148.99999999999963, + 149.04999999999964, + 149.09999999999965, + 149.14999999999966, + 149.19999999999968, + 149.2499999999997, + 149.2999999999997, + 149.3499999999997, + 149.39999999999972, + 149.44999999999973, + 149.49999999999974, + 149.54999999999976, + 149.59999999999977, + 149.64999999999978, + 149.6999999999998, + 149.7499999999998, + 149.7999999999998, + 149.84999999999982, + 149.89999999999984, + 149.94999999999985, + 149.99999999999986, + 150.04999999999987, + 150.09999999999988, + 150.1499999999999, + 150.1999999999999, + 150.24999999999991, + 150.29999999999993, + 150.34999999999994, + 150.39999999999995, + 150.44999999999996, + 150.49999999999997, + 150.54999999999998, + 150.6, + 150.65, + 150.70000000000002, + 150.75000000000003, + 150.80000000000004, + 150.85000000000005, + 150.90000000000006, + 150.95000000000007, + 151.00000000000009, + 151.0500000000001, + 151.1000000000001, + 151.15000000000012, + 151.20000000000013, + 151.25000000000014, + 151.30000000000015, + 151.35000000000016, + 151.40000000000018, + 151.4500000000002, + 151.5000000000002, + 151.5500000000002, + 151.60000000000022, + 151.65000000000023, + 151.70000000000024, + 151.75000000000026, + 151.80000000000027, + 151.85000000000028, + 151.9000000000003, + 151.9500000000003, + 152.0000000000003, + 152.05000000000032, + 152.10000000000034, + 152.15000000000035, + 152.20000000000036, + 152.25000000000037, + 152.30000000000038, + 152.3500000000004, + 152.4000000000004, + 152.45000000000041, + 152.50000000000043, + 152.55000000000044, + 152.60000000000045, + 152.65000000000046, + 152.70000000000047, + 152.75000000000048, + 152.8000000000005, + 152.8500000000005, + 152.90000000000052, + 152.95000000000053, + 153.00000000000054, + 153.05000000000055, + 153.10000000000056, + 153.15000000000057, + 153.20000000000059, + 153.2500000000006, + 153.3000000000006, + 153.35000000000062, + 153.40000000000063, + 153.45000000000064, + 153.50000000000065, + 153.55000000000067, + 153.60000000000068, + 153.6500000000007, + 153.7000000000007, + 153.7500000000007, + 153.80000000000072, + 153.85000000000073, + 153.90000000000074, + 153.95000000000076, + 154.00000000000077, + 154.05000000000078, + 154.1000000000008, + 154.1500000000008, + 154.2000000000008, + 154.25000000000082, + 154.30000000000084, + 154.35000000000085, + 154.40000000000086, + 154.45000000000087, + 154.50000000000088, + 154.5500000000009, + 154.6000000000009, + 154.65000000000092, + 154.70000000000093, + 154.75000000000094, + 154.80000000000095, + 154.85000000000096, + 154.90000000000097, + 154.95000000000098, + 155.000000000001, + 155.050000000001, + 155.10000000000102, + 155.15000000000103, + 155.20000000000104, + 155.25000000000105, + 155.30000000000106, + 155.35000000000107, + 155.40000000000109, + 155.4500000000011, + 155.5000000000011, + 155.55000000000112, + 155.60000000000113, + 155.65000000000114, + 155.70000000000115, + 155.75000000000117, + 155.80000000000118, + 155.8500000000012, + 155.9000000000012, + 155.9500000000012, + 156.00000000000122, + 156.05000000000123, + 156.10000000000124, + 156.15000000000126, + 156.20000000000127, + 156.25000000000128, + 156.3000000000013, + 156.3500000000013, + 156.4000000000013, + 156.45000000000132, + 156.50000000000134, + 156.55000000000135, + 156.60000000000136, + 156.65000000000137, + 156.70000000000138, + 156.7500000000014, + 156.8000000000014, + 156.85000000000142, + 156.90000000000143, + 156.95000000000144, + 157.00000000000145, + 157.05000000000146, + 157.10000000000147, + 157.15000000000148, + 157.2000000000015, + 157.2500000000015, + 157.30000000000152, + 157.35000000000153, + 157.40000000000154, + 157.45000000000155, + 157.50000000000156, + 157.55000000000157, + 157.6000000000016, + 157.6500000000016, + 157.7000000000016, + 157.75000000000162, + 157.80000000000163, + 157.85000000000164, + 157.90000000000165, + 157.95000000000167, + 158.00000000000168, + 158.0500000000017, + 158.1000000000017, + 158.1500000000017, + 158.20000000000172, + 158.25000000000173, + 158.30000000000175, + 158.35000000000176, + 158.40000000000177, + 158.45000000000178, + 158.5000000000018, + 158.5500000000018, + 158.6000000000018, + 158.65000000000182, + 158.70000000000184, + 158.75000000000185, + 158.80000000000186, + 158.85000000000187, + 158.90000000000188, + 158.9500000000019, + 159.0000000000019, + 159.05000000000192, + 159.10000000000193, + 159.15000000000194, + 159.20000000000195, + 159.25000000000196, + 159.30000000000197, + 159.35000000000198, + 159.400000000002, + 159.450000000002, + 159.50000000000202, + 159.55000000000203, + 159.60000000000204, + 159.65000000000205, + 159.70000000000206, + 159.75000000000207, + 159.8000000000021, + 159.8500000000021, + 159.9000000000021, + 159.95000000000212, + 160.00000000000213, + 160.05000000000214, + 160.10000000000215, + 160.15000000000217, + 160.20000000000218, + 160.2500000000022, + 160.3000000000022, + 160.3500000000022, + 160.40000000000222, + 160.45000000000223, + 160.50000000000225, + 160.55000000000226, + 160.60000000000227, + 160.65000000000228, + 160.7000000000023, + 160.7500000000023, + 160.8000000000023, + 160.85000000000232, + 160.90000000000234, + 160.95000000000235, + 161.00000000000236, + 161.05000000000237, + 161.10000000000238, + 161.1500000000024, + 161.2000000000024, + 161.25000000000242, + 161.30000000000243, + 161.35000000000244, + 161.40000000000245, + 161.45000000000246, + 161.50000000000247, + 161.55000000000248, + 161.6000000000025, + 161.6500000000025, + 161.70000000000252, + 161.75000000000253, + 161.80000000000254, + 161.85000000000255, + 161.90000000000256, + 161.95000000000258, + 162.0000000000026, + 162.0500000000026, + 162.1000000000026, + 162.15000000000262, + 162.20000000000263, + 162.25000000000264, + 162.30000000000265, + 162.35000000000267, + 162.40000000000268, + 162.4500000000027, + 162.5000000000027, + 162.5500000000027, + 162.60000000000272, + 162.65000000000273, + 162.70000000000275, + 162.75000000000276, + 162.80000000000277, + 162.85000000000278, + 162.9000000000028, + 162.9500000000028, + 163.0000000000028, + 163.05000000000283, + 163.10000000000284, + 163.15000000000285, + 163.20000000000286, + 163.25000000000287, + 163.30000000000288, + 163.3500000000029, + 163.4000000000029, + 163.45000000000292, + 163.50000000000293, + 163.55000000000294, + 163.60000000000295, + 163.65000000000296, + 163.70000000000297, + 163.75000000000298, + 163.800000000003, + 163.850000000003, + 163.90000000000302, + 163.95000000000303, + 164.00000000000304, + 164.05000000000305, + 164.10000000000306, + 164.15000000000308, + 164.2000000000031, + 164.2500000000031, + 164.3000000000031, + 164.35000000000312, + 164.40000000000313, + 164.45000000000314, + 164.50000000000315, + 164.55000000000317, + 164.60000000000318, + 164.6500000000032, + 164.7000000000032, + 164.7500000000032, + 164.80000000000322, + 164.85000000000323, + 164.90000000000325, + 164.95000000000326, + 165.00000000000327, + 165.05000000000328, + 165.1000000000033, + 165.1500000000033, + 165.2000000000033, + 165.25000000000333, + 165.30000000000334, + 165.35000000000335, + 165.40000000000336, + 165.45000000000337, + 165.50000000000338, + 165.5500000000034, + 165.6000000000034, + 165.65000000000342, + 165.70000000000343, + 165.75000000000344, + 165.80000000000345, + 165.85000000000346, + 165.90000000000347, + 165.95000000000348, + 166.0000000000035, + 166.0500000000035, + 166.10000000000352, + 166.15000000000353, + 166.20000000000354, + 166.25000000000355, + 166.30000000000356, + 166.35000000000358, + 166.4000000000036, + 166.4500000000036, + 166.5000000000036, + 166.55000000000362, + 166.60000000000363, + 166.65000000000364, + 166.70000000000366, + 166.75000000000367, + 166.80000000000368, + 166.8500000000037, + 166.9000000000037, + 166.9500000000037, + 167.00000000000372, + 167.05000000000373, + 167.10000000000375, + 167.15000000000376, + 167.20000000000377, + 167.25000000000378, + 167.3000000000038, + 167.3500000000038, + 167.4000000000038, + 167.45000000000383, + 167.50000000000384, + 167.55000000000385, + 167.60000000000386, + 167.65000000000387, + 167.70000000000388, + 167.7500000000039, + 167.8000000000039, + 167.85000000000392, + 167.90000000000393, + 167.95000000000394, + 168.00000000000395, + 168.05000000000396, + 168.10000000000397, + 168.15000000000398, + 168.200000000004, + 168.250000000004, + 168.30000000000402, + 168.35000000000403, + 168.40000000000404, + 168.45000000000405, + 168.50000000000406, + 168.55000000000408, + 168.6000000000041, + 168.6500000000041, + 168.7000000000041, + 168.75000000000412, + 168.80000000000413, + 168.85000000000414, + 168.90000000000416, + 168.95000000000417, + 169.00000000000418, + 169.0500000000042, + 169.1000000000042, + 169.1500000000042, + 169.20000000000422, + 169.25000000000423, + 169.30000000000425, + 169.35000000000426, + 169.40000000000427, + 169.45000000000428, + 169.5000000000043, + 169.5500000000043, + 169.60000000000431, + 169.65000000000433, + 169.70000000000434, + 169.75000000000435, + 169.80000000000436, + 169.85000000000437, + 169.90000000000438, + 169.9500000000044, + 170.0000000000044, + 170.05000000000442, + 170.10000000000443, + 170.15000000000444, + 170.20000000000445, + 170.25000000000446, + 170.30000000000447, + 170.35000000000448, + 170.4000000000045, + 170.4500000000045, + 170.50000000000452, + 170.55000000000453, + 170.60000000000454, + 170.65000000000455, + 170.70000000000456, + 170.75000000000458, + 170.8000000000046, + 170.8500000000046, + 170.9000000000046, + 170.95000000000462, + 171.00000000000463, + 171.05000000000464, + 171.10000000000466, + 171.15000000000467, + 171.20000000000468, + 171.2500000000047, + 171.3000000000047, + 171.3500000000047, + 171.40000000000472, + 171.45000000000474, + 171.50000000000475, + 171.55000000000476, + 171.60000000000477, + 171.65000000000478, + 171.7000000000048, + 171.7500000000048, + 171.80000000000481, + 171.85000000000483, + 171.90000000000484, + 171.95000000000485, + 172.00000000000486, + 172.05000000000487, + 172.10000000000488, + 172.1500000000049, + 172.2000000000049, + 172.25000000000492, + 172.30000000000493, + 172.35000000000494, + 172.40000000000495, + 172.45000000000496, + 172.50000000000497, + 172.55000000000499, + 172.600000000005, + 172.650000000005, + 172.70000000000502, + 172.75000000000503, + 172.80000000000504, + 172.85000000000505, + 172.90000000000506, + 172.95000000000508, + 173.0000000000051, + 173.0500000000051, + 173.1000000000051, + 173.15000000000512, + 173.20000000000513, + 173.25000000000514, + 173.30000000000516, + 173.35000000000517, + 173.40000000000518, + 173.4500000000052, + 173.5000000000052, + 173.5500000000052, + 173.60000000000522, + 173.65000000000524, + 173.70000000000525, + 173.75000000000526, + 173.80000000000527, + 173.85000000000528, + 173.9000000000053, + 173.9500000000053, + 174.00000000000531, + 174.05000000000533, + 174.10000000000534, + 174.15000000000535, + 174.20000000000536, + 174.25000000000537, + 174.30000000000538, + 174.3500000000054, + 174.4000000000054, + 174.45000000000542, + 174.50000000000543, + 174.55000000000544, + 174.60000000000545, + 174.65000000000546, + 174.70000000000547, + 174.75000000000549, + 174.8000000000055, + 174.8500000000055, + 174.90000000000552, + 174.95000000000553, + 175.00000000000554, + 175.05000000000555, + 175.10000000000556, + 175.15000000000558, + 175.2000000000056, + 175.2500000000056, + 175.3000000000056, + 175.35000000000562, + 175.40000000000563, + 175.45000000000564, + 175.50000000000566, + 175.55000000000567, + 175.60000000000568, + 175.6500000000057, + 175.7000000000057, + 175.7500000000057, + 175.80000000000572, + 175.85000000000574, + 175.90000000000575, + 175.95000000000576, + 176.00000000000577, + 176.05000000000578, + 176.1000000000058, + 176.1500000000058, + 176.20000000000582, + 176.25000000000583, + 176.30000000000584, + 176.35000000000585, + 176.40000000000586, + 176.45000000000587, + 176.50000000000588, + 176.5500000000059, + 176.6000000000059, + 176.65000000000592, + 176.70000000000593, + 176.75000000000594, + 176.80000000000595, + 176.85000000000596, + 176.90000000000597, + 176.95000000000599, + 177.000000000006, + 177.050000000006, + 177.10000000000602, + 177.15000000000603, + 177.20000000000604, + 177.25000000000605, + 177.30000000000607, + 177.35000000000608, + 177.4000000000061, + 177.4500000000061, + 177.5000000000061, + 177.55000000000612, + 177.60000000000613, + 177.65000000000614, + 177.70000000000616, + 177.75000000000617, + 177.80000000000618, + 177.8500000000062, + 177.9000000000062, + 177.9500000000062, + 178.00000000000622, + 178.05000000000624, + 178.10000000000625, + 178.15000000000626, + 178.20000000000627, + 178.25000000000628, + 178.3000000000063, + 178.3500000000063, + 178.40000000000632, + 178.45000000000633, + 178.50000000000634, + 178.55000000000635, + 178.60000000000636, + 178.65000000000637, + 178.70000000000638, + 178.7500000000064, + 178.8000000000064, + 178.85000000000642, + 178.90000000000643, + 178.95000000000644, + 179.00000000000645, + 179.05000000000646, + 179.10000000000647, + 179.1500000000065, + 179.2000000000065, + 179.2500000000065, + 179.30000000000652, + 179.35000000000653, + 179.40000000000654, + 179.45000000000655, + 179.50000000000657, + 179.55000000000658, + 179.6000000000066, + 179.6500000000066, + 179.7000000000066, + 179.75000000000662, + 179.80000000000663, + 179.85000000000664, + 179.90000000000666, + 179.95000000000667, + 180.00000000000668, + 180.0500000000067, + 180.1000000000067, + 180.1500000000067, + 180.20000000000672, + 180.25000000000674, + 180.30000000000675, + 180.35000000000676, + 180.40000000000677, + 180.45000000000678, + 180.5000000000068, + 180.5500000000068, + 180.60000000000682, + 180.65000000000683, + 180.70000000000684, + 180.75000000000685, + 180.80000000000686, + 180.85000000000687, + 180.90000000000688, + 180.9500000000069, + 181.0000000000069, + 181.05000000000692, + 181.10000000000693, + 181.15000000000694, + 181.20000000000695, + 181.25000000000696, + 181.30000000000697, + 181.350000000007, + 181.400000000007, + 181.450000000007, + 181.50000000000702, + 181.55000000000703, + 181.60000000000704, + 181.65000000000705, + 181.70000000000707, + 181.75000000000708, + 181.8000000000071, + 181.8500000000071, + 181.9000000000071, + 181.95000000000712, + 182.00000000000713, + 182.05000000000715, + 182.10000000000716, + 182.15000000000717, + 182.20000000000718, + 182.2500000000072, + 182.3000000000072, + 182.3500000000072, + 182.40000000000722, + 182.45000000000724, + 182.50000000000725, + 182.55000000000726, + 182.60000000000727, + 182.65000000000728, + 182.7000000000073, + 182.7500000000073, + 182.80000000000732, + 182.85000000000733, + 182.90000000000734, + 182.95000000000735, + 183.00000000000736, + 183.05000000000737, + 183.10000000000738, + 183.1500000000074, + 183.2000000000074, + 183.25000000000742, + 183.30000000000743, + 183.35000000000744, + 183.40000000000745, + 183.45000000000746, + 183.50000000000747, + 183.5500000000075, + 183.6000000000075, + 183.6500000000075, + 183.70000000000752, + 183.75000000000753, + 183.80000000000754, + 183.85000000000755, + 183.90000000000757, + 183.95000000000758, + 184.0000000000076, + 184.0500000000076, + 184.1000000000076, + 184.15000000000762, + 184.20000000000763, + 184.25000000000765, + 184.30000000000766, + 184.35000000000767, + 184.40000000000768, + 184.4500000000077, + 184.5000000000077, + 184.5500000000077, + 184.60000000000773, + 184.65000000000774, + 184.70000000000775, + 184.75000000000776, + 184.80000000000777, + 184.85000000000778, + 184.9000000000078, + 184.9500000000078, + 185.00000000000782, + 185.05000000000783, + 185.10000000000784, + 185.15000000000785, + 185.20000000000786, + 185.25000000000787, + 185.30000000000788, + 185.3500000000079, + 185.4000000000079, + 185.45000000000792, + 185.50000000000793, + 185.55000000000794, + 185.60000000000795, + 185.65000000000796, + 185.70000000000798, + 185.750000000008, + 185.800000000008, + 185.850000000008, + 185.90000000000802, + 185.95000000000803, + 186.00000000000804, + 186.05000000000805, + 186.10000000000807, + 186.15000000000808, + 186.2000000000081, + 186.2500000000081, + 186.3000000000081, + 186.35000000000812, + 186.40000000000813, + 186.45000000000815, + 186.50000000000816, + 186.55000000000817, + 186.60000000000818, + 186.6500000000082, + 186.7000000000082, + 186.7500000000082, + 186.80000000000823, + 186.85000000000824, + 186.90000000000825, + 186.95000000000826, + 187.00000000000827, + 187.05000000000828, + 187.1000000000083, + 187.1500000000083, + 187.20000000000832, + 187.25000000000833, + 187.30000000000834, + 187.35000000000835, + 187.40000000000836, + 187.45000000000837, + 187.50000000000838, + 187.5500000000084, + 187.6000000000084, + 187.65000000000842, + 187.70000000000843, + 187.75000000000844, + 187.80000000000845, + 187.85000000000846, + 187.90000000000848, + 187.9500000000085, + 188.0000000000085, + 188.0500000000085, + 188.10000000000852, + 188.15000000000853, + 188.20000000000854, + 188.25000000000855, + 188.30000000000857, + 188.35000000000858, + 188.4000000000086, + 188.4500000000086, + 188.5000000000086, + 188.55000000000862, + 188.60000000000863, + 188.65000000000865, + 188.70000000000866, + 188.75000000000867, + 188.80000000000868, + 188.8500000000087, + 188.9000000000087, + 188.9500000000087, + 189.00000000000873, + 189.05000000000874, + 189.10000000000875, + 189.15000000000876, + 189.20000000000877, + 189.25000000000878, + 189.3000000000088, + 189.3500000000088, + 189.40000000000882, + 189.45000000000883, + 189.50000000000884, + 189.55000000000885, + 189.60000000000886, + 189.65000000000887, + 189.70000000000888, + 189.7500000000089, + 189.8000000000089, + 189.85000000000892, + 189.90000000000893, + 189.95000000000894, + 190.00000000000895, + 190.05000000000896, + 190.10000000000898, + 190.150000000009, + 190.200000000009, + 190.250000000009, + 190.30000000000902, + 190.35000000000903, + 190.40000000000904, + 190.45000000000906, + 190.50000000000907, + 190.55000000000908, + 190.6000000000091, + 190.6500000000091, + 190.7000000000091, + 190.75000000000912, + 190.80000000000913, + 190.85000000000915, + 190.90000000000916, + 190.95000000000917, + 191.00000000000918, + 191.0500000000092, + 191.1000000000092, + 191.15000000000921, + 191.20000000000923, + 191.25000000000924, + 191.30000000000925, + 191.35000000000926, + 191.40000000000927, + 191.45000000000928, + 191.5000000000093, + 191.5500000000093, + 191.60000000000932, + 191.65000000000933, + 191.70000000000934, + 191.75000000000935, + 191.80000000000936, + 191.85000000000937, + 191.90000000000938, + 191.9500000000094, + 192.0000000000094, + 192.05000000000942, + 192.10000000000943, + 192.15000000000944, + 192.20000000000945, + 192.25000000000946, + 192.30000000000948, + 192.3500000000095, + 192.4000000000095, + 192.4500000000095, + 192.50000000000952, + 192.55000000000953, + 192.60000000000954, + 192.65000000000956, + 192.70000000000957, + 192.75000000000958, + 192.8000000000096, + 192.8500000000096, + 192.9000000000096, + 192.95000000000962, + 193.00000000000963, + 193.05000000000965, + 193.10000000000966, + 193.15000000000967, + 193.20000000000968, + 193.2500000000097, + 193.3000000000097, + 193.35000000000971, + 193.40000000000973, + 193.45000000000974, + 193.50000000000975, + 193.55000000000976, + 193.60000000000977, + 193.65000000000978, + 193.7000000000098, + 193.7500000000098, + 193.80000000000982, + 193.85000000000983, + 193.90000000000984, + 193.95000000000985, + 194.00000000000986, + 194.05000000000987, + 194.10000000000989, + 194.1500000000099, + 194.2000000000099, + 194.25000000000992, + 194.30000000000993, + 194.35000000000994, + 194.40000000000995, + 194.45000000000996, + 194.50000000000998, + 194.55000000001, + 194.60000000001, + 194.65000000001, + 194.70000000001002, + 194.75000000001003, + 194.80000000001004, + 194.85000000001006, + 194.90000000001007, + 194.95000000001008, + 195.0000000000101, + 195.0500000000101, + 195.1000000000101, + 195.15000000001012, + 195.20000000001014, + 195.25000000001015, + 195.30000000001016, + 195.35000000001017, + 195.40000000001018, + 195.4500000000102, + 195.5000000000102, + 195.55000000001021, + 195.60000000001023, + 195.65000000001024, + 195.70000000001025, + 195.75000000001026, + 195.80000000001027, + 195.85000000001028, + 195.9000000000103, + 195.9500000000103, + 196.00000000001032, + 196.05000000001033, + 196.10000000001034, + 196.15000000001035, + 196.20000000001036, + 196.25000000001037, + 196.30000000001039, + 196.3500000000104, + 196.4000000000104, + 196.45000000001042, + 196.50000000001043, + 196.55000000001044, + 196.60000000001045, + 196.65000000001046, + 196.70000000001048, + 196.7500000000105, + 196.8000000000105, + 196.8500000000105, + 196.90000000001052, + 196.95000000001053, + 197.00000000001054, + 197.05000000001056, + 197.10000000001057, + 197.15000000001058, + 197.2000000000106, + 197.2500000000106, + 197.3000000000106, + 197.35000000001062, + 197.40000000001064, + 197.45000000001065, + 197.50000000001066, + 197.55000000001067, + 197.60000000001068, + 197.6500000000107, + 197.7000000000107, + 197.75000000001071, + 197.80000000001073, + 197.85000000001074, + 197.90000000001075, + 197.95000000001076, + 198.00000000001077, + 198.05000000001078, + 198.1000000000108, + 198.1500000000108, + 198.20000000001082, + 198.25000000001083, + 198.30000000001084, + 198.35000000001085, + 198.40000000001086, + 198.45000000001087, + 198.50000000001089, + 198.5500000000109, + 198.6000000000109, + 198.65000000001092, + 198.70000000001093, + 198.75000000001094, + 198.80000000001095, + 198.85000000001097, + 198.90000000001098, + 198.950000000011, + 199.000000000011, + 199.050000000011, + 199.10000000001102, + 199.15000000001103, + 199.20000000001104, + 199.25000000001106, + 199.30000000001107, + 199.35000000001108, + 199.4000000000111, + 199.4500000000111, + 199.5000000000111, + 199.55000000001112, + 199.60000000001114, + 199.65000000001115, + 199.70000000001116, + 199.75000000001117, + 199.80000000001118, + 199.8500000000112, + 199.9000000000112, + 199.95000000001122, + 200.00000000001123, + 200.05000000001124, + 200.10000000001125, + 200.15000000001126, + 200.20000000001127, + 200.25000000001128, + 200.3000000000113, + 200.3500000000113, + 200.40000000001132, + 200.45000000001133, + 200.50000000001134, + 200.55000000001135, + 200.60000000001136, + 200.65000000001137, + 200.70000000001139, + 200.7500000000114, + 200.8000000000114, + 200.85000000001142, + 200.90000000001143, + 200.95000000001144, + 201.00000000001145, + 201.05000000001147, + 201.10000000001148, + 201.1500000000115, + 201.2000000000115, + 201.2500000000115, + 201.30000000001152, + 201.35000000001153, + 201.40000000001154, + 201.45000000001156, + 201.50000000001157, + 201.55000000001158, + 201.6000000000116, + 201.6500000000116, + 201.7000000000116, + 201.75000000001162, + 201.80000000001164, + 201.85000000001165, + 201.90000000001166, + 201.95000000001167, + 202.00000000001168, + 202.0500000000117, + 202.1000000000117, + 202.15000000001172, + 202.20000000001173, + 202.25000000001174, + 202.30000000001175, + 202.35000000001176, + 202.40000000001177, + 202.45000000001178, + 202.5000000000118, + 202.5500000000118, + 202.60000000001182, + 202.65000000001183, + 202.70000000001184, + 202.75000000001185, + 202.80000000001186, + 202.85000000001187, + 202.9000000000119, + 202.9500000000119, + 203.0000000000119, + 203.05000000001192, + 203.10000000001193, + 203.15000000001194, + 203.20000000001195, + 203.25000000001197, + 203.30000000001198, + 203.350000000012, + 203.400000000012, + 203.450000000012, + 203.50000000001202, + 203.55000000001203, + 203.60000000001205, + 203.65000000001206, + 203.70000000001207, + 203.75000000001208, + 203.8000000000121, + 203.8500000000121, + 203.9000000000121, + 203.95000000001212, + 204.00000000001214, + 204.05000000001215, + 204.10000000001216, + 204.15000000001217, + 204.20000000001218, + 204.2500000000122, + 204.3000000000122, + 204.35000000001222, + 204.40000000001223, + 204.45000000001224, + 204.50000000001225, + 204.55000000001226, + 204.60000000001227, + 204.65000000001228, + 204.7000000000123, + 204.7500000000123, + 204.80000000001232, + 204.85000000001233, + 204.90000000001234, + 204.95000000001235, + 205.00000000001236, + 205.05000000001237, + 205.1000000000124, + 205.1500000000124, + 205.2000000000124, + 205.25000000001242, + 205.30000000001243, + 205.35000000001244, + 205.40000000001245, + 205.45000000001247, + 205.50000000001248, + 205.5500000000125, + 205.6000000000125, + 205.6500000000125, + 205.70000000001252, + 205.75000000001253, + 205.80000000001255, + 205.85000000001256, + 205.90000000001257, + 205.95000000001258, + 206.0000000000126, + 206.0500000000126, + 206.1000000000126, + 206.15000000001262, + 206.20000000001264, + 206.25000000001265, + 206.30000000001266, + 206.35000000001267, + 206.40000000001268, + 206.4500000000127, + 206.5000000000127, + 206.55000000001272, + 206.60000000001273, + 206.65000000001274, + 206.70000000001275, + 206.75000000001276, + 206.80000000001277, + 206.85000000001278, + 206.9000000000128, + 206.9500000000128, + 207.00000000001282, + 207.05000000001283, + 207.10000000001284, + 207.15000000001285, + 207.20000000001286, + 207.25000000001288, + 207.3000000000129, + 207.3500000000129, + 207.4000000000129, + 207.45000000001292, + 207.50000000001293, + 207.55000000001294, + 207.60000000001295, + 207.65000000001297, + 207.70000000001298, + 207.750000000013, + 207.800000000013, + 207.850000000013, + 207.90000000001302, + 207.95000000001303, + 208.00000000001305, + 208.05000000001306, + 208.10000000001307, + 208.15000000001308, + 208.2000000000131, + 208.2500000000131, + 208.3000000000131, + 208.35000000001313, + 208.40000000001314, + 208.45000000001315, + 208.50000000001316, + 208.55000000001317, + 208.60000000001318, + 208.6500000000132, + 208.7000000000132, + 208.75000000001322, + 208.80000000001323, + 208.85000000001324, + 208.90000000001325, + 208.95000000001326, + 209.00000000001327, + 209.05000000001328, + 209.1000000000133, + 209.1500000000133, + 209.20000000001332, + 209.25000000001333, + 209.30000000001334, + 209.35000000001335, + 209.40000000001336, + 209.45000000001338, + 209.5000000000134, + 209.5500000000134, + 209.6000000000134, + 209.65000000001342, + 209.70000000001343, + 209.75000000001344, + 209.80000000001345, + 209.85000000001347, + 209.90000000001348, + 209.9500000000135, + 210.0000000000135, + 210.0500000000135, + 210.10000000001352, + 210.15000000001353, + 210.20000000001355, + 210.25000000001356, + 210.30000000001357, + 210.35000000001358, + 210.4000000000136, + 210.4500000000136, + 210.5000000000136, + 210.55000000001363, + 210.60000000001364, + 210.65000000001365, + 210.70000000001366, + 210.75000000001367, + 210.80000000001368, + 210.8500000000137, + 210.9000000000137, + 210.95000000001372, + 211.00000000001373, + 211.05000000001374, + 211.10000000001375, + 211.15000000001376, + 211.20000000001377, + 211.25000000001378, + 211.3000000000138, + 211.3500000000138, + 211.40000000001382, + 211.45000000001383, + 211.50000000001384, + 211.55000000001385, + 211.60000000001386, + 211.65000000001388, + 211.7000000000139, + 211.7500000000139, + 211.8000000000139, + 211.85000000001392, + 211.90000000001393, + 211.95000000001394, + 212.00000000001396, + 212.05000000001397, + 212.10000000001398, + 212.150000000014, + 212.200000000014, + 212.250000000014, + 212.30000000001402, + 212.35000000001403, + 212.40000000001405, + 212.45000000001406, + 212.50000000001407, + 212.55000000001408, + 212.6000000000141, + 212.6500000000141, + 212.70000000001411, + 212.75000000001413, + 212.80000000001414, + 212.85000000001415, + 212.90000000001416, + 212.95000000001417, + 213.00000000001418, + 213.0500000000142, + 213.1000000000142, + 213.15000000001422, + 213.20000000001423, + 213.25000000001424, + 213.30000000001425, + 213.35000000001426, + 213.40000000001427, + 213.45000000001428, + 213.5000000000143, + 213.5500000000143, + 213.60000000001432, + 213.65000000001433, + 213.70000000001434, + 213.75000000001435, + 213.80000000001436, + 213.85000000001438, + 213.9000000000144, + 213.9500000000144, + 214.0000000000144, + 214.05000000001442, + 214.10000000001443, + 214.15000000001444, + 214.20000000001446, + 214.25000000001447, + 214.30000000001448, + 214.3500000000145, + 214.4000000000145, + 214.4500000000145, + 214.50000000001452, + 214.55000000001453, + 214.60000000001455, + 214.65000000001456, + 214.70000000001457, + 214.75000000001458, + 214.8000000000146, + 214.8500000000146, + 214.90000000001461, + 214.95000000001463, + 215.00000000001464, + 215.05000000001465, + 215.10000000001466, + 215.15000000001467, + 215.20000000001468, + 215.2500000000147, + 215.3000000000147, + 215.35000000001472, + 215.40000000001473, + 215.45000000001474, + 215.50000000001475, + 215.55000000001476, + 215.60000000001477, + 215.65000000001478, + 215.7000000000148, + 215.7500000000148, + 215.80000000001482, + 215.85000000001483, + 215.90000000001484, + 215.95000000001485, + 216.00000000001486, + 216.05000000001488, + 216.1000000000149, + 216.1500000000149, + 216.2000000000149, + 216.25000000001492, + 216.30000000001493, + 216.35000000001494, + 216.40000000001496, + 216.45000000001497, + 216.50000000001498, + 216.550000000015, + 216.600000000015, + 216.650000000015, + 216.70000000001502, + 216.75000000001504, + 216.80000000001505, + 216.85000000001506, + 216.90000000001507, + 216.95000000001508, + 217.0000000000151, + 217.0500000000151, + 217.10000000001511, + 217.15000000001513, + 217.20000000001514, + 217.25000000001515, + 217.30000000001516, + 217.35000000001517, + 217.40000000001518, + 217.4500000000152, + 217.5000000000152, + 217.55000000001522, + 217.60000000001523, + 217.65000000001524, + 217.70000000001525, + 217.75000000001526, + 217.80000000001527, + 217.85000000001529, + 217.9000000000153, + 217.9500000000153, + 218.00000000001532, + 218.05000000001533, + 218.10000000001534, + 218.15000000001535, + 218.20000000001536, + 218.25000000001538, + 218.3000000000154, + 218.3500000000154, + 218.4000000000154, + 218.45000000001542, + 218.50000000001543, + 218.55000000001544, + 218.60000000001546, + 218.65000000001547, + 218.70000000001548, + 218.7500000000155, + 218.8000000000155, + 218.8500000000155, + 218.90000000001552, + 218.95000000001554, + 219.00000000001555, + 219.05000000001556, + 219.10000000001557, + 219.15000000001558, + 219.2000000000156, + 219.2500000000156, + 219.30000000001561, + 219.35000000001563, + 219.40000000001564, + 219.45000000001565, + 219.50000000001566, + 219.55000000001567, + 219.60000000001568, + 219.6500000000157, + 219.7000000000157, + 219.75000000001572, + 219.80000000001573, + 219.85000000001574, + 219.90000000001575, + 219.95000000001576, + 220.00000000001577, + 220.05000000001579, + 220.1000000000158, + 220.1500000000158, + 220.20000000001582, + 220.25000000001583, + 220.30000000001584, + 220.35000000001585, + 220.40000000001586, + 220.45000000001588, + 220.5000000000159, + 220.5500000000159, + 220.6000000000159, + 220.65000000001592, + 220.70000000001593, + 220.75000000001594, + 220.80000000001596, + 220.85000000001597, + 220.90000000001598, + 220.950000000016, + 221.000000000016, + 221.050000000016, + 221.10000000001602, + 221.15000000001604, + 221.20000000001605, + 221.25000000001606, + 221.30000000001607, + 221.35000000001608, + 221.4000000000161, + 221.4500000000161, + 221.50000000001612, + 221.55000000001613, + 221.60000000001614, + 221.65000000001615, + 221.70000000001616, + 221.75000000001617, + 221.80000000001618, + 221.8500000000162, + 221.9000000000162, + 221.95000000001622, + 222.00000000001623, + 222.05000000001624, + 222.10000000001625, + 222.15000000001626, + 222.20000000001627, + 222.25000000001629, + 222.3000000000163, + 222.3500000000163, + 222.40000000001632, + 222.45000000001633, + 222.50000000001634, + 222.55000000001635, + 222.60000000001637, + 222.65000000001638, + 222.7000000000164, + 222.7500000000164, + 222.8000000000164, + 222.85000000001642, + 222.90000000001643, + 222.95000000001644, + 223.00000000001646, + 223.05000000001647, + 223.10000000001648, + 223.1500000000165, + 223.2000000000165, + 223.2500000000165, + 223.30000000001652, + 223.35000000001654, + 223.40000000001655, + 223.45000000001656, + 223.50000000001657, + 223.55000000001658, + 223.6000000000166, + 223.6500000000166, + 223.70000000001662, + 223.75000000001663, + 223.80000000001664, + 223.85000000001665, + 223.90000000001666, + 223.95000000001667, + 224.00000000001668, + 224.0500000000167, + 224.1000000000167, + 224.15000000001672, + 224.20000000001673, + 224.25000000001674, + 224.30000000001675, + 224.35000000001676, + 224.40000000001677, + 224.4500000000168, + 224.5000000000168, + 224.5500000000168, + 224.60000000001682, + 224.65000000001683, + 224.70000000001684, + 224.75000000001685, + 224.80000000001687, + 224.85000000001688, + 224.9000000000169, + 224.9500000000169, + 225.0000000000169, + 225.05000000001692, + 225.10000000001693, + 225.15000000001695, + 225.20000000001696, + 225.25000000001697, + 225.30000000001698, + 225.350000000017, + 225.400000000017, + 225.450000000017, + 225.50000000001702, + 225.55000000001704, + 225.60000000001705, + 225.65000000001706, + 225.70000000001707, + 225.75000000001708, + 225.8000000000171, + 225.8500000000171, + 225.90000000001712, + 225.95000000001713, + 226.00000000001714, + 226.05000000001715, + 226.10000000001716, + 226.15000000001717, + 226.20000000001718, + 226.2500000000172, + 226.3000000000172, + 226.35000000001722, + 226.40000000001723, + 226.45000000001724, + 226.50000000001725, + 226.55000000001726, + 226.60000000001727, + 226.6500000000173, + 226.7000000000173, + 226.7500000000173, + 226.80000000001732, + 226.85000000001733, + 226.90000000001734, + 226.95000000001735, + 227.00000000001737, + 227.05000000001738, + 227.1000000000174, + 227.1500000000174, + 227.2000000000174, + 227.25000000001742, + 227.30000000001743, + 227.35000000001745, + 227.40000000001746, + 227.45000000001747, + 227.50000000001748, + 227.5500000000175, + 227.6000000000175, + 227.6500000000175, + 227.70000000001752, + 227.75000000001754, + 227.80000000001755, + 227.85000000001756, + 227.90000000001757, + 227.95000000001758, + 228.0000000000176, + 228.0500000000176, + 228.10000000001762, + 228.15000000001763, + 228.20000000001764, + 228.25000000001765, + 228.30000000001766, + 228.35000000001767, + 228.40000000001768, + 228.4500000000177, + 228.5000000000177, + 228.55000000001772, + 228.60000000001773, + 228.65000000001774, + 228.70000000001775, + 228.75000000001776, + 228.80000000001777, + 228.8500000000178, + 228.9000000000178, + 228.9500000000178, + 229.00000000001782, + 229.05000000001783, + 229.10000000001784, + 229.15000000001785, + 229.20000000001787, + 229.25000000001788, + 229.3000000000179, + 229.3500000000179, + 229.4000000000179, + 229.45000000001792, + 229.50000000001793, + 229.55000000001795, + 229.60000000001796, + 229.65000000001797, + 229.70000000001798, + 229.750000000018, + 229.800000000018, + 229.850000000018, + 229.90000000001803, + 229.95000000001804, + 230.00000000001805, + 230.05000000001806, + 230.10000000001807, + 230.15000000001808, + 230.2000000000181, + 230.2500000000181, + 230.30000000001812, + 230.35000000001813, + 230.40000000001814, + 230.45000000001815, + 230.50000000001816, + 230.55000000001817, + 230.60000000001818, + 230.6500000000182, + 230.7000000000182, + 230.75000000001822, + 230.80000000001823, + 230.85000000001824, + 230.90000000001825, + 230.95000000001826, + 231.00000000001828, + 231.0500000000183, + 231.1000000000183, + 231.1500000000183, + 231.20000000001832, + 231.25000000001833, + 231.30000000001834, + 231.35000000001835, + 231.40000000001837, + 231.45000000001838, + 231.5000000000184, + 231.5500000000184, + 231.6000000000184, + 231.65000000001842, + 231.70000000001843, + 231.75000000001845, + 231.80000000001846, + 231.85000000001847, + 231.90000000001848, + 231.9500000000185, + 232.0000000000185, + 232.0500000000185, + 232.10000000001853, + 232.15000000001854, + 232.20000000001855, + 232.25000000001856, + 232.30000000001857, + 232.35000000001858, + 232.4000000000186, + 232.4500000000186, + 232.50000000001862, + 232.55000000001863, + 232.60000000001864, + 232.65000000001865, + 232.70000000001866, + 232.75000000001867, + 232.80000000001868, + 232.8500000000187, + 232.9000000000187, + 232.95000000001872, + 233.00000000001873, + 233.05000000001874, + 233.10000000001875, + 233.15000000001876, + 233.20000000001878, + 233.2500000000188, + 233.3000000000188, + 233.3500000000188, + 233.40000000001882, + 233.45000000001883, + 233.50000000001884, + 233.55000000001885, + 233.60000000001887, + 233.65000000001888, + 233.7000000000189, + 233.7500000000189, + 233.8000000000189, + 233.85000000001892, + 233.90000000001893, + 233.95000000001895, + 234.00000000001896, + 234.05000000001897, + 234.10000000001898, + 234.150000000019, + 234.200000000019, + 234.250000000019, + 234.30000000001903, + 234.35000000001904, + 234.40000000001905, + 234.45000000001906, + 234.50000000001907, + 234.55000000001908, + 234.6000000000191, + 234.6500000000191, + 234.70000000001912, + 234.75000000001913, + 234.80000000001914, + 234.85000000001915, + 234.90000000001916, + 234.95000000001917, + 235.00000000001918, + 235.0500000000192, + 235.1000000000192, + 235.15000000001922, + 235.20000000001923, + 235.25000000001924, + 235.30000000001925, + 235.35000000001926, + 235.40000000001928, + 235.4500000000193, + 235.5000000000193, + 235.5500000000193, + 235.60000000001932, + 235.65000000001933, + 235.70000000001934, + 235.75000000001936, + 235.80000000001937, + 235.85000000001938, + 235.9000000000194, + 235.9500000000194, + 236.0000000000194, + 236.05000000001942, + 236.10000000001943, + 236.15000000001945, + 236.20000000001946, + 236.25000000001947, + 236.30000000001948, + 236.3500000000195, + 236.4000000000195, + 236.45000000001951, + 236.50000000001953, + 236.55000000001954, + 236.60000000001955, + 236.65000000001956, + 236.70000000001957, + 236.75000000001958, + 236.8000000000196, + 236.8500000000196, + 236.90000000001962, + 236.95000000001963, + 237.00000000001964, + 237.05000000001965, + 237.10000000001966, + 237.15000000001967, + 237.20000000001968, + 237.2500000000197, + 237.3000000000197, + 237.35000000001972, + 237.40000000001973, + 237.45000000001974, + 237.50000000001975, + 237.55000000001976, + 237.60000000001978, + 237.6500000000198, + 237.7000000000198, + 237.7500000000198, + 237.80000000001982, + 237.85000000001983, + 237.90000000001984, + 237.95000000001986, + 238.00000000001987, + 238.05000000001988, + 238.1000000000199, + 238.1500000000199, + 238.2000000000199, + 238.25000000001992, + 238.30000000001993, + 238.35000000001995, + 238.40000000001996, + 238.45000000001997, + 238.50000000001998, + 238.55000000002, + 238.60000000002, + 238.65000000002001, + 238.70000000002003, + 238.75000000002004, + 238.80000000002005, + 238.85000000002006, + 238.90000000002007, + 238.95000000002008, + 239.0000000000201, + 239.0500000000201, + 239.10000000002012, + 239.15000000002013, + 239.20000000002014, + 239.25000000002015, + 239.30000000002016, + 239.35000000002017, + 239.40000000002019, + 239.4500000000202, + 239.5000000000202, + 239.55000000002022, + 239.60000000002023, + 239.65000000002024, + 239.70000000002025, + 239.75000000002026, + 239.80000000002028, + 239.8500000000203, + 239.9000000000203, + 239.9500000000203, + 240.00000000002032, + 240.05000000002033, + 240.10000000002034, + 240.15000000002036, + 240.20000000002037, + 240.25000000002038, + 240.3000000000204, + 240.3500000000204, + 240.4000000000204, + 240.45000000002042, + 240.50000000002044, + 240.55000000002045, + 240.60000000002046, + 240.65000000002047, + 240.70000000002048, + 240.7500000000205, + 240.8000000000205, + 240.85000000002051, + 240.90000000002053, + 240.95000000002054, + 241.00000000002055, + 241.05000000002056, + 241.10000000002057, + 241.15000000002058, + 241.2000000000206, + 241.2500000000206, + 241.30000000002062, + 241.35000000002063, + 241.40000000002064, + 241.45000000002065, + 241.50000000002066, + 241.55000000002067, + 241.60000000002069, + 241.6500000000207, + 241.7000000000207, + 241.75000000002072, + 241.80000000002073, + 241.85000000002074, + 241.90000000002075, + 241.95000000002076, + 242.00000000002078, + 242.0500000000208, + 242.1000000000208, + 242.1500000000208, + 242.20000000002082, + 242.25000000002083, + 242.30000000002084, + 242.35000000002086, + 242.40000000002087, + 242.45000000002088, + 242.5000000000209, + 242.5500000000209, + 242.6000000000209, + 242.65000000002092, + 242.70000000002094, + 242.75000000002095, + 242.80000000002096, + 242.85000000002097, + 242.90000000002098, + 242.950000000021, + 243.000000000021, + 243.05000000002102, + 243.10000000002103, + 243.15000000002104, + 243.20000000002105, + 243.25000000002106, + 243.30000000002107, + 243.35000000002108, + 243.4000000000211, + 243.4500000000211, + 243.50000000002112, + 243.55000000002113, + 243.60000000002114, + 243.65000000002115, + 243.70000000002116, + 243.75000000002117, + 243.80000000002119, + 243.8500000000212, + 243.9000000000212, + 243.95000000002122, + 244.00000000002123, + 244.05000000002124, + 244.10000000002125, + 244.15000000002127, + 244.20000000002128, + 244.2500000000213, + 244.3000000000213, + 244.3500000000213, + 244.40000000002132, + 244.45000000002133, + 244.50000000002134, + 244.55000000002136, + 244.60000000002137, + 244.65000000002138, + 244.7000000000214, + 244.7500000000214, + 244.8000000000214, + 244.85000000002142, + 244.90000000002144, + 244.95000000002145, + 245.00000000002146, + 245.05000000002147, + 245.10000000002148, + 245.1500000000215, + 245.2000000000215, + 245.25000000002152, + 245.30000000002153, + 245.35000000002154, + 245.40000000002155, + 245.45000000002156, + 245.50000000002157, + 245.55000000002158, + 245.6000000000216, + 245.6500000000216, + 245.70000000002162, + 245.75000000002163, + 245.80000000002164, + 245.85000000002165, + 245.90000000002166, + 245.95000000002167, + 246.00000000002169, + 246.0500000000217, + 246.1000000000217, + 246.15000000002172, + 246.20000000002173, + 246.25000000002174, + 246.30000000002175, + 246.35000000002177, + 246.40000000002178, + 246.4500000000218, + 246.5000000000218, + 246.5500000000218, + 246.60000000002182, + 246.65000000002183, + 246.70000000002184, + 246.75000000002186, + 246.80000000002187, + 246.85000000002188, + 246.9000000000219, + 246.9500000000219, + 247.0000000000219, + 247.05000000002192, + 247.10000000002194, + 247.15000000002195, + 247.20000000002196, + 247.25000000002197, + 247.30000000002198, + 247.350000000022, + 247.400000000022, + 247.45000000002202, + 247.50000000002203, + 247.55000000002204, + 247.60000000002205, + 247.65000000002206, + 247.70000000002207, + 247.75000000002208, + 247.8000000000221, + 247.8500000000221, + 247.90000000002212, + 247.95000000002213, + 248.00000000002214, + 248.05000000002215, + 248.10000000002216, + 248.15000000002217, + 248.2000000000222, + 248.2500000000222, + 248.3000000000222, + 248.35000000002222, + 248.40000000002223, + 248.45000000002224, + 248.50000000002225, + 248.55000000002227, + 248.60000000002228, + 248.6500000000223, + 248.7000000000223, + 248.7500000000223, + 248.80000000002232, + 248.85000000002233, + 248.90000000002235, + 248.95000000002236, + 249.00000000002237, + 249.05000000002238, + 249.1000000000224, + 249.1500000000224, + 249.2000000000224, + 249.25000000002242, + 249.30000000002244, + 249.35000000002245, + 249.40000000002246, + 249.45000000002247, + 249.50000000002248, + 249.5500000000225, + 249.6000000000225, + 249.65000000002252, + 249.70000000002253, + 249.75000000002254, + 249.80000000002255, + 249.85000000002256, + 249.90000000002257, + 249.95000000002258, + 250.0000000000226, + 250.0500000000226, + 250.10000000002262, + 250.15000000002263, + 250.20000000002264, + 250.25000000002265, + 250.30000000002266, + 250.35000000002267, + 250.4000000000227, + 250.4500000000227, + 250.5000000000227, + 250.55000000002272, + 250.60000000002273, + 250.65000000002274, + 250.70000000002275, + 250.75000000002277, + 250.80000000002278, + 250.8500000000228, + 250.9000000000228, + 250.9500000000228, + 251.00000000002282, + 251.05000000002283, + 251.10000000002285, + 251.15000000002286, + 251.20000000002287, + 251.25000000002288, + 251.3000000000229, + 251.3500000000229, + 251.4000000000229, + 251.45000000002292, + 251.50000000002294, + 251.55000000002295, + 251.60000000002296, + 251.65000000002297, + 251.70000000002298, + 251.750000000023, + 251.800000000023, + 251.85000000002302, + 251.90000000002303, + 251.95000000002304, + 252.00000000002305, + 252.05000000002306, + 252.10000000002307, + 252.15000000002308, + 252.2000000000231, + 252.2500000000231, + 252.30000000002312, + 252.35000000002313, + 252.40000000002314, + 252.45000000002315, + 252.50000000002316, + 252.55000000002318, + 252.6000000000232, + 252.6500000000232, + 252.7000000000232, + 252.75000000002322, + 252.80000000002323, + 252.85000000002324, + 252.90000000002325, + 252.95000000002327, + 253.00000000002328, + 253.0500000000233, + 253.1000000000233, + 253.1500000000233, + 253.20000000002332, + 253.25000000002333, + 253.30000000002335, + 253.35000000002336, + 253.40000000002337, + 253.45000000002338, + 253.5000000000234, + 253.5500000000234, + 253.6000000000234, + 253.65000000002343, + 253.70000000002344, + 253.75000000002345, + 253.80000000002346, + 253.85000000002347, + 253.90000000002348, + 253.9500000000235, + 254.0000000000235, + 254.05000000002352, + 254.10000000002353, + 254.15000000002354, + 254.20000000002355, + 254.25000000002356, + 254.30000000002357, + 254.35000000002358, + 254.4000000000236, + 254.4500000000236, + 254.50000000002362, + 254.55000000002363, + 254.60000000002364, + 254.65000000002365, + 254.70000000002366, + 254.75000000002368, + 254.8000000000237, + 254.8500000000237, + 254.9000000000237, + 254.95000000002372, + 255.00000000002373, + 255.05000000002374, + 255.10000000002375, + 255.15000000002377, + 255.20000000002378, + 255.2500000000238, + 255.3000000000238, + 255.3500000000238, + 255.40000000002382, + 255.45000000002383, + 255.50000000002385, + 255.55000000002386, + 255.60000000002387, + 255.65000000002388, + 255.7000000000239, + 255.7500000000239, + 255.8000000000239, + 255.85000000002393, + 255.90000000002394, + 255.95000000002395, + 256.00000000002393, + 256.05000000002394, + 256.10000000002395, + 256.15000000002397, + 256.200000000024, + 256.250000000024, + 256.300000000024, + 256.350000000024, + 256.400000000024, + 256.45000000002403, + 256.50000000002404, + 256.55000000002406, + 256.60000000002407, + 256.6500000000241, + 256.7000000000241, + 256.7500000000241, + 256.8000000000241, + 256.8500000000241, + 256.90000000002414, + 256.95000000002415, + 257.00000000002416, + 257.05000000002417, + 257.1000000000242, + 257.1500000000242, + 257.2000000000242, + 257.2500000000242, + 257.3000000000242, + 257.35000000002424, + 257.40000000002425, + 257.45000000002426, + 257.5000000000243, + 257.5500000000243, + 257.6000000000243, + 257.6500000000243, + 257.7000000000243, + 257.75000000002433, + 257.80000000002434, + 257.85000000002435, + 257.90000000002436, + 257.9500000000244, + 258.0000000000244, + 258.0500000000244, + 258.1000000000244, + 258.1500000000244, + 258.20000000002443, + 258.25000000002444, + 258.30000000002445, + 258.35000000002447, + 258.4000000000245, + 258.4500000000245, + 258.5000000000245, + 258.5500000000245, + 258.6000000000245, + 258.65000000002453, + 258.70000000002454, + 258.75000000002456, + 258.80000000002457, + 258.8500000000246, + 258.9000000000246, + 258.9500000000246, + 259.0000000000246, + 259.0500000000246, + 259.10000000002464, + 259.15000000002465, + 259.20000000002466, + 259.25000000002467, + 259.3000000000247, + 259.3500000000247, + 259.4000000000247, + 259.4500000000247, + 259.5000000000247, + 259.55000000002474, + 259.60000000002475, + 259.65000000002476, + 259.7000000000248, + 259.7500000000248, + 259.8000000000248, + 259.8500000000248, + 259.9000000000248, + 259.95000000002483, + 260.00000000002484, + 260.05000000002485, + 260.10000000002486, + 260.1500000000249, + 260.2000000000249, + 260.2500000000249, + 260.3000000000249, + 260.3500000000249, + 260.40000000002493, + 260.45000000002494, + 260.50000000002495, + 260.55000000002497, + 260.600000000025, + 260.650000000025, + 260.700000000025, + 260.750000000025, + 260.800000000025, + 260.85000000002503, + 260.90000000002505, + 260.95000000002506, + 261.00000000002507, + 261.0500000000251, + 261.1000000000251, + 261.1500000000251, + 261.2000000000251, + 261.2500000000251, + 261.30000000002514, + 261.35000000002515, + 261.40000000002516, + 261.45000000002517, + 261.5000000000252, + 261.5500000000252, + 261.6000000000252, + 261.6500000000252, + 261.7000000000252, + 261.75000000002524, + 261.80000000002525, + 261.85000000002526, + 261.9000000000253, + 261.9500000000253, + 262.0000000000253, + 262.0500000000253, + 262.1000000000253, + 262.15000000002533, + 262.20000000002534, + 262.25000000002535, + 262.30000000002536, + 262.3500000000254, + 262.4000000000254, + 262.4500000000254, + 262.5000000000254, + 262.5500000000254, + 262.60000000002543, + 262.65000000002544, + 262.70000000002545, + 262.75000000002547, + 262.8000000000255, + 262.8500000000255, + 262.9000000000255, + 262.9500000000255, + 263.0000000000255, + 263.05000000002553, + 263.10000000002555, + 263.15000000002556, + 263.20000000002557, + 263.2500000000256, + 263.3000000000256, + 263.3500000000256, + 263.4000000000256, + 263.4500000000256, + 263.50000000002564, + 263.55000000002565, + 263.60000000002566, + 263.65000000002567, + 263.7000000000257, + 263.7500000000257, + 263.8000000000257, + 263.8500000000257, + 263.9000000000257, + 263.95000000002574, + 264.00000000002575, + 264.05000000002576, + 264.1000000000258, + 264.1500000000258, + 264.2000000000258, + 264.2500000000258, + 264.3000000000258, + 264.35000000002583, + 264.40000000002584, + 264.45000000002585, + 264.50000000002586, + 264.5500000000259, + 264.6000000000259, + 264.6500000000259, + 264.7000000000259, + 264.7500000000259, + 264.80000000002593, + 264.85000000002594, + 264.90000000002595, + 264.95000000002597, + 265.000000000026, + 265.050000000026, + 265.100000000026, + 265.150000000026, + 265.200000000026, + 265.25000000002603, + 265.30000000002605, + 265.35000000002606, + 265.40000000002607, + 265.4500000000261, + 265.5000000000261, + 265.5500000000261, + 265.6000000000261, + 265.6500000000261, + 265.70000000002614, + 265.75000000002615, + 265.80000000002616, + 265.85000000002617, + 265.9000000000262, + 265.9500000000262, + 266.0000000000262, + 266.0500000000262, + 266.1000000000262, + 266.15000000002624, + 266.20000000002625, + 266.25000000002626, + 266.3000000000263, + 266.3500000000263, + 266.4000000000263, + 266.4500000000263, + 266.5000000000263, + 266.55000000002633, + 266.60000000002634, + 266.65000000002635, + 266.70000000002636, + 266.7500000000264, + 266.8000000000264, + 266.8500000000264, + 266.9000000000264, + 266.9500000000264, + 267.00000000002643, + 267.05000000002644, + 267.10000000002645, + 267.15000000002647, + 267.2000000000265, + 267.2500000000265, + 267.3000000000265, + 267.3500000000265, + 267.4000000000265, + 267.45000000002653, + 267.50000000002655, + 267.55000000002656, + 267.60000000002657, + 267.6500000000266, + 267.7000000000266, + 267.7500000000266, + 267.8000000000266, + 267.8500000000266, + 267.90000000002664, + 267.95000000002665, + 268.00000000002666, + 268.05000000002667, + 268.1000000000267, + 268.1500000000267, + 268.2000000000267, + 268.2500000000267, + 268.3000000000267, + 268.35000000002674, + 268.40000000002675, + 268.45000000002676, + 268.5000000000268, + 268.5500000000268, + 268.6000000000268, + 268.6500000000268, + 268.7000000000268, + 268.75000000002683, + 268.80000000002684, + 268.85000000002685, + 268.90000000002686, + 268.9500000000269, + 269.0000000000269, + 269.0500000000269, + 269.1000000000269, + 269.1500000000269, + 269.20000000002693, + 269.25000000002694, + 269.30000000002696, + 269.35000000002697, + 269.400000000027, + 269.450000000027, + 269.500000000027, + 269.550000000027, + 269.600000000027, + 269.65000000002703, + 269.70000000002705, + 269.75000000002706, + 269.80000000002707, + 269.8500000000271, + 269.9000000000271, + 269.9500000000271, + 270.0000000000271, + 270.0500000000271, + 270.10000000002714, + 270.15000000002715, + 270.20000000002716, + 270.25000000002717, + 270.3000000000272, + 270.3500000000272, + 270.4000000000272, + 270.4500000000272, + 270.5000000000272, + 270.55000000002724, + 270.60000000002725, + 270.65000000002726, + 270.7000000000273, + 270.7500000000273, + 270.8000000000273, + 270.8500000000273, + 270.9000000000273, + 270.95000000002733, + 271.00000000002734, + 271.05000000002735, + 271.10000000002736, + 271.1500000000274, + 271.2000000000274, + 271.2500000000274, + 271.3000000000274, + 271.3500000000274, + 271.40000000002743, + 271.45000000002744, + 271.50000000002746, + 271.55000000002747, + 271.6000000000275, + 271.6500000000275, + 271.7000000000275, + 271.7500000000275, + 271.8000000000275, + 271.85000000002753, + 271.90000000002755, + 271.95000000002756, + 272.00000000002757, + 272.0500000000276, + 272.1000000000276, + 272.1500000000276, + 272.2000000000276, + 272.2500000000276, + 272.30000000002764, + 272.35000000002765, + 272.40000000002766, + 272.45000000002767, + 272.5000000000277, + 272.5500000000277, + 272.6000000000277, + 272.6500000000277, + 272.7000000000277, + 272.75000000002774, + 272.80000000002775, + 272.85000000002776, + 272.9000000000278, + 272.9500000000278, + 273.0000000000278, + 273.0500000000278, + 273.1000000000278, + 273.15000000002783, + 273.20000000002784, + 273.25000000002785, + 273.30000000002786, + 273.3500000000279, + 273.4000000000279, + 273.4500000000279, + 273.5000000000279, + 273.5500000000279, + 273.60000000002793, + 273.65000000002794, + 273.70000000002796, + 273.75000000002797, + 273.800000000028, + 273.850000000028, + 273.900000000028, + 273.950000000028, + 274.000000000028, + 274.05000000002804, + 274.10000000002805, + 274.15000000002806, + 274.20000000002807, + 274.2500000000281, + 274.3000000000281, + 274.3500000000281, + 274.4000000000281, + 274.4500000000281, + 274.50000000002814, + 274.55000000002815, + 274.60000000002816, + 274.6500000000282, + 274.7000000000282, + 274.7500000000282, + 274.8000000000282, + 274.8500000000282, + 274.90000000002823, + 274.95000000002824, + 275.00000000002825, + 275.05000000002826, + 275.1000000000283, + 275.1500000000283, + 275.2000000000283, + 275.2500000000283, + 275.3000000000283, + 275.35000000002833, + 275.40000000002834, + 275.45000000002835, + 275.50000000002836, + 275.5500000000284, + 275.6000000000284, + 275.6500000000284, + 275.7000000000284, + 275.7500000000284, + 275.80000000002843, + 275.85000000002844, + 275.90000000002846, + 275.95000000002847, + 276.0000000000285, + 276.0500000000285, + 276.1000000000285, + 276.1500000000285, + 276.2000000000285, + 276.25000000002854, + 276.30000000002855, + 276.35000000002856, + 276.40000000002857, + 276.4500000000286, + 276.5000000000286, + 276.5500000000286, + 276.6000000000286, + 276.6500000000286, + 276.70000000002864, + 276.75000000002865, + 276.80000000002866, + 276.8500000000287, + 276.9000000000287, + 276.9500000000287, + 277.0000000000287, + 277.0500000000287, + 277.10000000002873, + 277.15000000002874, + 277.20000000002875, + 277.25000000002876, + 277.3000000000288, + 277.3500000000288, + 277.4000000000288, + 277.4500000000288, + 277.5000000000288, + 277.55000000002883, + 277.60000000002884, + 277.65000000002885, + 277.70000000002887, + 277.7500000000289, + 277.8000000000289, + 277.8500000000289, + 277.9000000000289, + 277.9500000000289, + 278.00000000002893, + 278.05000000002894, + 278.10000000002896, + 278.15000000002897, + 278.200000000029, + 278.250000000029, + 278.300000000029, + 278.350000000029, + 278.400000000029, + 278.45000000002904, + 278.50000000002905, + 278.55000000002906, + 278.60000000002907, + 278.6500000000291, + 278.7000000000291, + 278.7500000000291, + 278.8000000000291, + 278.8500000000291, + 278.90000000002914, + 278.95000000002915, + 279.00000000002916, + 279.0500000000292, + 279.1000000000292, + 279.1500000000292, + 279.2000000000292, + 279.2500000000292, + 279.30000000002923, + 279.35000000002924, + 279.40000000002925, + 279.45000000002926, + 279.5000000000293, + 279.5500000000293, + 279.6000000000293, + 279.6500000000293, + 279.7000000000293, + 279.75000000002933, + 279.80000000002934, + 279.85000000002935, + 279.90000000002937, + 279.9500000000294, + 280.0000000000294, + 280.0500000000294, + 280.1000000000294, + 280.1500000000294, + 280.20000000002943, + 280.25000000002944, + 280.30000000002946, + 280.35000000002947, + 280.4000000000295, + 280.4500000000295, + 280.5000000000295, + 280.5500000000295, + 280.6000000000295, + 280.65000000002954, + 280.70000000002955, + 280.75000000002956, + 280.80000000002957, + 280.8500000000296, + 280.9000000000296, + 280.9500000000296, + 281.0000000000296, + 281.0500000000296, + 281.10000000002964, + 281.15000000002965, + 281.20000000002966, + 281.2500000000297, + 281.3000000000297, + 281.3500000000297, + 281.4000000000297, + 281.4500000000297, + 281.50000000002973, + 281.55000000002974, + 281.60000000002975, + 281.65000000002976, + 281.7000000000298, + 281.7500000000298, + 281.8000000000298, + 281.8500000000298, + 281.9000000000298, + 281.95000000002983, + 282.00000000002984, + 282.05000000002985, + 282.10000000002987, + 282.1500000000299, + 282.2000000000299, + 282.2500000000299, + 282.3000000000299, + 282.3500000000299, + 282.40000000002993, + 282.45000000002995, + 282.50000000002996, + 282.55000000002997, + 282.60000000003, + 282.65000000003, + 282.70000000003, + 282.75000000003, + 282.80000000003, + 282.85000000003004, + 282.90000000003005, + 282.95000000003006, + 283.00000000003007, + 283.0500000000301, + 283.1000000000301, + 283.1500000000301, + 283.2000000000301, + 283.2500000000301, + 283.30000000003014, + 283.35000000003015, + 283.40000000003016, + 283.4500000000302, + 283.5000000000302, + 283.5500000000302, + 283.6000000000302, + 283.6500000000302, + 283.70000000003023, + 283.75000000003024, + 283.80000000003025, + 283.85000000003026, + 283.9000000000303, + 283.9500000000303, + 284.0000000000303, + 284.0500000000303, + 284.1000000000303, + 284.15000000003033, + 284.20000000003034, + 284.25000000003035, + 284.30000000003037, + 284.3500000000304, + 284.4000000000304, + 284.4500000000304, + 284.5000000000304, + 284.5500000000304, + 284.60000000003043, + 284.65000000003045, + 284.70000000003046, + 284.75000000003047, + 284.8000000000305, + 284.8500000000305, + 284.9000000000305, + 284.9500000000305, + 285.0000000000305, + 285.05000000003054, + 285.10000000003055, + 285.15000000003056, + 285.20000000003057, + 285.2500000000306, + 285.3000000000306, + 285.3500000000306, + 285.4000000000306, + 285.4500000000306, + 285.50000000003064, + 285.55000000003065, + 285.60000000003066, + 285.6500000000307, + 285.7000000000307, + 285.7500000000307, + 285.8000000000307, + 285.8500000000307, + 285.90000000003073, + 285.95000000003074, + 286.00000000003075, + 286.05000000003076, + 286.1000000000308, + 286.1500000000308, + 286.2000000000308, + 286.2500000000308, + 286.3000000000308, + 286.35000000003083, + 286.40000000003084, + 286.45000000003085, + 286.50000000003087, + 286.5500000000309, + 286.6000000000309, + 286.6500000000309, + 286.7000000000309, + 286.7500000000309, + 286.80000000003093, + 286.85000000003095, + 286.90000000003096, + 286.95000000003097, + 287.000000000031, + 287.050000000031, + 287.100000000031, + 287.150000000031, + 287.200000000031, + 287.25000000003104, + 287.30000000003105, + 287.35000000003106, + 287.40000000003107, + 287.4500000000311, + 287.5000000000311, + 287.5500000000311, + 287.6000000000311, + 287.6500000000311, + 287.70000000003114, + 287.75000000003115, + 287.80000000003116, + 287.8500000000312, + 287.9000000000312, + 287.9500000000312, + 288.0000000000312, + 288.0500000000312, + 288.10000000003123, + 288.15000000003124, + 288.20000000003125, + 288.25000000003126, + 288.3000000000313, + 288.3500000000313, + 288.4000000000313, + 288.4500000000313, + 288.5000000000313, + 288.55000000003133, + 288.60000000003134, + 288.65000000003135, + 288.70000000003137, + 288.7500000000314, + 288.8000000000314, + 288.8500000000314, + 288.9000000000314, + 288.9500000000314, + 289.00000000003143, + 289.05000000003145, + 289.10000000003146, + 289.15000000003147, + 289.2000000000315, + 289.2500000000315, + 289.3000000000315, + 289.3500000000315, + 289.4000000000315, + 289.45000000003154, + 289.50000000003155, + 289.55000000003156, + 289.60000000003157, + 289.6500000000316, + 289.7000000000316, + 289.7500000000316, + 289.8000000000316, + 289.8500000000316, + 289.90000000003164, + 289.95000000003165, + 290.00000000003166, + 290.0500000000317, + 290.1000000000317, + 290.1500000000317, + 290.2000000000317, + 290.2500000000317, + 290.30000000003173, + 290.35000000003174, + 290.40000000003175, + 290.45000000003176, + 290.5000000000318, + 290.5500000000318, + 290.6000000000318, + 290.6500000000318, + 290.7000000000318, + 290.75000000003183, + 290.80000000003184, + 290.85000000003186, + 290.90000000003187, + 290.9500000000319, + 291.0000000000319, + 291.0500000000319, + 291.1000000000319, + 291.1500000000319, + 291.20000000003193, + 291.25000000003195, + 291.30000000003196, + 291.35000000003197, + 291.400000000032, + 291.450000000032, + 291.500000000032, + 291.550000000032, + 291.600000000032, + 291.65000000003204, + 291.70000000003205, + 291.75000000003206, + 291.80000000003207, + 291.8500000000321, + 291.9000000000321, + 291.9500000000321, + 292.0000000000321, + 292.0500000000321, + 292.10000000003214, + 292.15000000003215, + 292.20000000003216, + 292.2500000000322, + 292.3000000000322, + 292.3500000000322, + 292.4000000000322, + 292.4500000000322, + 292.50000000003223, + 292.55000000003224, + 292.60000000003225, + 292.65000000003226, + 292.7000000000323, + 292.7500000000323, + 292.8000000000323, + 292.8500000000323, + 292.9000000000323, + 292.95000000003233, + 293.00000000003234, + 293.05000000003236, + 293.10000000003237, + 293.1500000000324, + 293.2000000000324, + 293.2500000000324, + 293.3000000000324, + 293.3500000000324, + 293.40000000003243, + 293.45000000003245, + 293.50000000003246, + 293.55000000003247, + 293.6000000000325, + 293.6500000000325, + 293.7000000000325, + 293.7500000000325, + 293.8000000000325, + 293.85000000003254, + 293.90000000003255, + 293.95000000003256, + 294.00000000003257, + 294.0500000000326, + 294.1000000000326, + 294.1500000000326, + 294.2000000000326, + 294.2500000000326, + 294.30000000003264, + 294.35000000003265, + 294.40000000003266, + 294.4500000000327, + 294.5000000000327, + 294.5500000000327, + 294.6000000000327, + 294.6500000000327, + 294.70000000003273, + 294.75000000003274, + 294.80000000003275, + 294.85000000003276, + 294.9000000000328, + 294.9500000000328, + 295.0000000000328, + 295.0500000000328, + 295.1000000000328, + 295.15000000003283, + 295.20000000003284, + 295.25000000003286, + 295.30000000003287, + 295.3500000000329, + 295.4000000000329, + 295.4500000000329, + 295.5000000000329, + 295.5500000000329, + 295.60000000003294, + 295.65000000003295, + 295.70000000003296, + 295.75000000003297, + 295.800000000033, + 295.850000000033, + 295.900000000033, + 295.950000000033, + 296.000000000033, + 296.05000000003304, + 296.10000000003305, + 296.15000000003306, + 296.20000000003307, + 296.2500000000331, + 296.3000000000331, + 296.3500000000331, + 296.4000000000331, + 296.4500000000331, + 296.50000000003314, + 296.55000000003315, + 296.60000000003316, + 296.6500000000332, + 296.7000000000332, + 296.7500000000332, + 296.8000000000332, + 296.8500000000332, + 296.90000000003323, + 296.95000000003324, + 297.00000000003325, + 297.05000000003326, + 297.1000000000333, + 297.1500000000333, + 297.2000000000333, + 297.2500000000333, + 297.3000000000333, + 297.35000000003333, + 297.40000000003334, + 297.45000000003336, + 297.50000000003337, + 297.5500000000334, + 297.6000000000334, + 297.6500000000334, + 297.7000000000334, + 297.7500000000334, + 297.80000000003344, + 297.85000000003345, + 297.90000000003346, + 297.95000000003347, + 298.0000000000335, + 298.0500000000335, + 298.1000000000335, + 298.1500000000335, + 298.2000000000335, + 298.25000000003354, + 298.30000000003355, + 298.35000000003356, + 298.4000000000336, + 298.4500000000336, + 298.5000000000336, + 298.5500000000336, + 298.6000000000336, + 298.65000000003363, + 298.70000000003364, + 298.75000000003365, + 298.80000000003366, + 298.8500000000337, + 298.9000000000337, + 298.9500000000337, + 299.0000000000337, + 299.0500000000337, + 299.10000000003373, + 299.15000000003374, + 299.20000000003375, + 299.25000000003376, + 299.3000000000338, + 299.3500000000338, + 299.4000000000338, + 299.4500000000338, + 299.5000000000338, + 299.55000000003383, + 299.60000000003384, + 299.65000000003386, + 299.70000000003387, + 299.7500000000339, + 299.8000000000339, + 299.8500000000339, + 299.9000000000339, + 299.9500000000339, + 300.00000000003394, + 300.05000000003395, + 300.10000000003396, + 300.15000000003397, + 300.200000000034, + 300.250000000034, + 300.300000000034, + 300.350000000034, + 300.400000000034, + 300.45000000003404, + 300.50000000003405, + 300.55000000003406, + 300.6000000000341, + 300.6500000000341, + 300.7000000000341, + 300.7500000000341, + 300.8000000000341, + 300.85000000003413, + 300.90000000003414, + 300.95000000003415, + 301.00000000003416, + 301.0500000000342, + 301.1000000000342, + 301.1500000000342, + 301.2000000000342, + 301.2500000000342, + 301.30000000003423, + 301.35000000003424, + 301.40000000003425, + 301.45000000003427, + 301.5000000000343, + 301.5500000000343, + 301.6000000000343, + 301.6500000000343, + 301.7000000000343, + 301.75000000003433, + 301.80000000003434, + 301.85000000003436, + 301.90000000003437, + 301.9500000000344, + 302.0000000000344, + 302.0500000000344, + 302.1000000000344, + 302.1500000000344, + 302.20000000003444, + 302.25000000003445, + 302.30000000003446, + 302.35000000003447, + 302.4000000000345, + 302.4500000000345, + 302.5000000000345, + 302.5500000000345, + 302.6000000000345, + 302.65000000003454, + 302.70000000003455, + 302.75000000003456, + 302.8000000000346, + 302.8500000000346, + 302.9000000000346, + 302.9500000000346, + 303.0000000000346, + 303.05000000003463, + 303.10000000003464, + 303.15000000003465, + 303.20000000003466, + 303.2500000000347, + 303.3000000000347, + 303.3500000000347, + 303.4000000000347, + 303.4500000000347, + 303.50000000003473, + 303.55000000003474, + 303.60000000003475, + 303.65000000003477, + 303.7000000000348, + 303.7500000000348, + 303.8000000000348, + 303.8500000000348, + 303.9000000000348, + 303.95000000003483, + 304.00000000003485, + 304.05000000003486, + 304.10000000003487, + 304.1500000000349, + 304.2000000000349, + 304.2500000000349, + 304.3000000000349, + 304.3500000000349, + 304.40000000003494, + 304.45000000003495, + 304.50000000003496, + 304.55000000003497, + 304.600000000035, + 304.650000000035, + 304.700000000035, + 304.750000000035, + 304.800000000035, + 304.85000000003504, + 304.90000000003505, + 304.95000000003506, + 305.0000000000351, + 305.0500000000351, + 305.1000000000351, + 305.1500000000351, + 305.2000000000351, + 305.25000000003513, + 305.30000000003514, + 305.35000000003515, + 305.40000000003516, + 305.4500000000352, + 305.5000000000352, + 305.5500000000352, + 305.6000000000352, + 305.6500000000352, + 305.70000000003523, + 305.75000000003524, + 305.80000000003525, + 305.85000000003527, + 305.9000000000353, + 305.9500000000353, + 306.0000000000353, + 306.0500000000353, + 306.1000000000353, + 306.15000000003533, + 306.20000000003535, + 306.25000000003536, + 306.30000000003537, + 306.3500000000354, + 306.4000000000354, + 306.4500000000354, + 306.5000000000354, + 306.5500000000354, + 306.60000000003544, + 306.65000000003545, + 306.70000000003546, + 306.75000000003547, + 306.8000000000355, + 306.8500000000355, + 306.9000000000355, + 306.9500000000355, + 307.0000000000355, + 307.05000000003554, + 307.10000000003555, + 307.15000000003556, + 307.2000000000356, + 307.2500000000356, + 307.3000000000356, + 307.3500000000356, + 307.4000000000356, + 307.45000000003563, + 307.50000000003564, + 307.55000000003565, + 307.60000000003566, + 307.6500000000357, + 307.7000000000357, + 307.7500000000357, + 307.8000000000357, + 307.8500000000357, + 307.90000000003573, + 307.95000000003574, + 308.00000000003575, + 308.05000000003577, + 308.1000000000358, + 308.1500000000358, + 308.2000000000358, + 308.2500000000358, + 308.3000000000358, + 308.35000000003583, + 308.40000000003585, + 308.45000000003586, + 308.50000000003587, + 308.5500000000359, + 308.6000000000359, + 308.6500000000359, + 308.7000000000359, + 308.7500000000359, + 308.80000000003594, + 308.85000000003595, + 308.90000000003596, + 308.95000000003597, + 309.000000000036, + 309.050000000036, + 309.100000000036, + 309.150000000036, + 309.200000000036, + 309.25000000003604, + 309.30000000003605, + 309.35000000003606, + 309.4000000000361, + 309.4500000000361, + 309.5000000000361, + 309.5500000000361, + 309.6000000000361, + 309.65000000003613, + 309.70000000003614, + 309.75000000003615, + 309.80000000003616, + 309.8500000000362, + 309.9000000000362, + 309.9500000000362, + 310.0000000000362, + 310.0500000000362, + 310.10000000003623, + 310.15000000003624, + 310.20000000003625, + 310.25000000003627, + 310.3000000000363, + 310.3500000000363, + 310.4000000000363, + 310.4500000000363, + 310.5000000000363, + 310.55000000003633, + 310.60000000003635, + 310.65000000003636, + 310.70000000003637, + 310.7500000000364, + 310.8000000000364, + 310.8500000000364, + 310.9000000000364, + 310.9500000000364, + 311.00000000003644, + 311.05000000003645, + 311.10000000003646, + 311.15000000003647, + 311.2000000000365, + 311.2500000000365, + 311.3000000000365, + 311.3500000000365, + 311.4000000000365, + 311.45000000003654, + 311.50000000003655, + 311.55000000003656, + 311.6000000000366, + 311.6500000000366, + 311.7000000000366, + 311.7500000000366, + 311.8000000000366, + 311.85000000003663, + 311.90000000003664, + 311.95000000003665, + 312.00000000003666, + 312.0500000000367, + 312.1000000000367, + 312.1500000000367, + 312.2000000000367, + 312.2500000000367, + 312.30000000003673, + 312.35000000003674, + 312.40000000003675, + 312.45000000003677, + 312.5000000000368, + 312.5500000000368, + 312.6000000000368, + 312.6500000000368, + 312.7000000000368, + 312.75000000003683, + 312.80000000003685, + 312.85000000003686, + 312.90000000003687, + 312.9500000000369, + 313.0000000000369, + 313.0500000000369, + 313.1000000000369, + 313.1500000000369, + 313.20000000003694, + 313.25000000003695, + 313.30000000003696, + 313.35000000003697, + 313.400000000037, + 313.450000000037, + 313.500000000037, + 313.550000000037, + 313.600000000037, + 313.65000000003704, + 313.70000000003705, + 313.75000000003706, + 313.8000000000371, + 313.8500000000371, + 313.9000000000371, + 313.9500000000371, + 314.0000000000371, + 314.05000000003713, + 314.10000000003714, + 314.15000000003715, + 314.20000000003716, + 314.2500000000372, + 314.3000000000372, + 314.3500000000372, + 314.4000000000372, + 314.4500000000372, + 314.50000000003723, + 314.55000000003724, + 314.60000000003726, + 314.65000000003727, + 314.7000000000373, + 314.7500000000373, + 314.8000000000373, + 314.8500000000373, + 314.9000000000373, + 314.95000000003733, + 315.00000000003735, + 315.05000000003736, + 315.10000000003737, + 315.1500000000374, + 315.2000000000374, + 315.2500000000374, + 315.3000000000374, + 315.3500000000374, + 315.40000000003744, + 315.45000000003745, + 315.50000000003746, + 315.55000000003747, + 315.6000000000375, + 315.6500000000375, + 315.7000000000375, + 315.7500000000375, + 315.8000000000375, + 315.85000000003754, + 315.90000000003755, + 315.95000000003756, + 316.0000000000376, + 316.0500000000376, + 316.1000000000376, + 316.1500000000376, + 316.2000000000376, + 316.25000000003763, + 316.30000000003764, + 316.35000000003765, + 316.40000000003766, + 316.4500000000377, + 316.5000000000377, + 316.5500000000377, + 316.6000000000377, + 316.6500000000377, + 316.70000000003773, + 316.75000000003774, + 316.80000000003776, + 316.85000000003777, + 316.9000000000378, + 316.9500000000378, + 317.0000000000378, + 317.0500000000378, + 317.1000000000378, + 317.15000000003783, + 317.20000000003785, + 317.25000000003786, + 317.30000000003787, + 317.3500000000379, + 317.4000000000379, + 317.4500000000379, + 317.5000000000379, + 317.5500000000379, + 317.60000000003794, + 317.65000000003795, + 317.70000000003796, + 317.75000000003797, + 317.800000000038, + 317.850000000038, + 317.900000000038, + 317.950000000038, + 318.000000000038, + 318.05000000003804, + 318.10000000003805, + 318.15000000003806, + 318.2000000000381, + 318.2500000000381, + 318.3000000000381, + 318.3500000000381, + 318.4000000000381, + 318.45000000003813, + 318.50000000003814, + 318.55000000003815, + 318.60000000003816, + 318.6500000000382, + 318.7000000000382, + 318.7500000000382, + 318.8000000000382, + 318.8500000000382, + 318.90000000003823, + 318.95000000003824, + 319.00000000003826, + 319.05000000003827, + 319.1000000000383, + 319.1500000000383, + 319.2000000000383, + 319.2500000000383, + 319.3000000000383, + 319.35000000003834, + 319.40000000003835, + 319.45000000003836, + 319.50000000003837, + 319.5500000000384, + 319.6000000000384, + 319.6500000000384, + 319.7000000000384, + 319.7500000000384, + 319.80000000003844, + 319.85000000003845, + 319.90000000003846, + 319.9500000000385, + 320.0000000000385, + 320.0500000000385, + 320.1000000000385, + 320.1500000000385, + 320.20000000003853, + 320.25000000003854, + 320.30000000003855, + 320.35000000003856, + 320.4000000000386, + 320.4500000000386, + 320.5000000000386, + 320.5500000000386, + 320.6000000000386, + 320.65000000003863, + 320.70000000003864, + 320.75000000003865, + 320.80000000003866, + 320.8500000000387, + 320.9000000000387, + 320.9500000000387, + 321.0000000000387, + 321.0500000000387, + 321.10000000003873, + 321.15000000003874, + 321.20000000003876, + 321.25000000003877, + 321.3000000000388, + 321.3500000000388, + 321.4000000000388, + 321.4500000000388, + 321.5000000000388, + 321.55000000003884, + 321.60000000003885, + 321.65000000003886, + 321.70000000003887, + 321.7500000000389, + 321.8000000000389, + 321.8500000000389, + 321.9000000000389, + 321.9500000000389, + 322.00000000003894, + 322.05000000003895, + 322.10000000003896, + 322.150000000039, + 322.200000000039, + 322.250000000039, + 322.300000000039, + 322.350000000039, + 322.40000000003903, + 322.45000000003904, + 322.50000000003905, + 322.55000000003906, + 322.6000000000391, + 322.6500000000391, + 322.7000000000391, + 322.7500000000391, + 322.8000000000391, + 322.85000000003913, + 322.90000000003914, + 322.95000000003915, + 323.00000000003917, + 323.0500000000392, + 323.1000000000392, + 323.1500000000392, + 323.2000000000392, + 323.2500000000392, + 323.30000000003923, + 323.35000000003924, + 323.40000000003926, + 323.45000000003927, + 323.5000000000393, + 323.5500000000393, + 323.6000000000393, + 323.6500000000393, + 323.7000000000393, + 323.75000000003934, + 323.80000000003935, + 323.85000000003936, + 323.90000000003937, + 323.9500000000394, + 324.0000000000394, + 324.0500000000394, + 324.1000000000394, + 324.1500000000394, + 324.20000000003944, + 324.25000000003945, + 324.30000000003946, + 324.3500000000395, + 324.4000000000395, + 324.4500000000395, + 324.5000000000395, + 324.5500000000395, + 324.60000000003953, + 324.65000000003954, + 324.70000000003955, + 324.75000000003956, + 324.8000000000396, + 324.8500000000396, + 324.9000000000396, + 324.9500000000396, + 325.0000000000396, + 325.05000000003963, + 325.10000000003964, + 325.15000000003965, + 325.20000000003967, + 325.2500000000397, + 325.3000000000397, + 325.3500000000397, + 325.4000000000397, + 325.4500000000397, + 325.50000000003973, + 325.55000000003974, + 325.60000000003976, + 325.65000000003977, + 325.7000000000398, + 325.7500000000398, + 325.8000000000398, + 325.8500000000398, + 325.9000000000398, + 325.95000000003984, + 326.00000000003985, + 326.05000000003986, + 326.10000000003987, + 326.1500000000399, + 326.2000000000399, + 326.2500000000399, + 326.3000000000399, + 326.3500000000399, + 326.40000000003994, + 326.45000000003995, + 326.50000000003996, + 326.55000000004, + 326.60000000004, + 326.65000000004, + 326.70000000004, + 326.75000000004, + 326.80000000004003, + 326.85000000004004, + 326.90000000004005, + 326.95000000004006, + 327.0000000000401, + 327.0500000000401, + 327.1000000000401, + 327.1500000000401, + 327.2000000000401, + 327.25000000004013, + 327.30000000004014, + 327.35000000004015, + 327.40000000004017, + 327.4500000000402, + 327.5000000000402, + 327.5500000000402, + 327.6000000000402, + 327.6500000000402, + 327.70000000004023, + 327.75000000004025, + 327.80000000004026, + 327.85000000004027, + 327.9000000000403, + 327.9500000000403, + 328.0000000000403, + 328.0500000000403, + 328.1000000000403, + 328.15000000004034, + 328.20000000004035, + 328.25000000004036, + 328.30000000004037, + 328.3500000000404, + 328.4000000000404, + 328.4500000000404, + 328.5000000000404, + 328.5500000000404, + 328.60000000004044, + 328.65000000004045, + 328.70000000004046, + 328.7500000000405, + 328.8000000000405, + 328.8500000000405, + 328.9000000000405, + 328.9500000000405, + 329.00000000004053, + 329.05000000004054, + 329.10000000004055, + 329.15000000004056, + 329.2000000000406, + 329.2500000000406, + 329.3000000000406, + 329.3500000000406, + 329.4000000000406, + 329.45000000004063, + 329.50000000004064, + 329.55000000004065, + 329.60000000004067, + 329.6500000000407, + 329.7000000000407, + 329.7500000000407, + 329.8000000000407, + 329.8500000000407, + 329.90000000004073, + 329.95000000004075, + 330.00000000004076, + 330.05000000004077, + 330.1000000000408, + 330.1500000000408, + 330.2000000000408, + 330.2500000000408, + 330.3000000000408, + 330.35000000004084, + 330.40000000004085, + 330.45000000004086, + 330.50000000004087, + 330.5500000000409, + 330.6000000000409, + 330.6500000000409, + 330.7000000000409, + 330.7500000000409, + 330.80000000004094, + 330.85000000004095, + 330.90000000004096, + 330.950000000041, + 331.000000000041, + 331.050000000041, + 331.100000000041, + 331.150000000041, + 331.20000000004103, + 331.25000000004104, + 331.30000000004105, + 331.35000000004106, + 331.4000000000411, + 331.4500000000411, + 331.5000000000411, + 331.5500000000411, + 331.6000000000411, + 331.65000000004113, + 331.70000000004114, + 331.75000000004115, + 331.80000000004117, + 331.8500000000412, + 331.9000000000412, + 331.9500000000412, + 332.0000000000412, + 332.0500000000412, + 332.10000000004123, + 332.15000000004125, + 332.20000000004126, + 332.25000000004127, + 332.3000000000413, + 332.3500000000413, + 332.4000000000413, + 332.4500000000413, + 332.5000000000413, + 332.55000000004134, + 332.60000000004135, + 332.65000000004136, + 332.70000000004137, + 332.7500000000414, + 332.8000000000414, + 332.8500000000414, + 332.9000000000414, + 332.9500000000414, + 333.00000000004144, + 333.05000000004145, + 333.10000000004146, + 333.1500000000415, + 333.2000000000415, + 333.2500000000415, + 333.3000000000415, + 333.3500000000415, + 333.40000000004153, + 333.45000000004154, + 333.50000000004155, + 333.55000000004156, + 333.6000000000416, + 333.6500000000416, + 333.7000000000416, + 333.7500000000416, + 333.8000000000416, + 333.85000000004163, + 333.90000000004164, + 333.95000000004165, + 334.00000000004167, + 334.0500000000417, + 334.1000000000417, + 334.1500000000417, + 334.2000000000417, + 334.2500000000417, + 334.30000000004173, + 334.35000000004175, + 334.40000000004176, + 334.45000000004177, + 334.5000000000418, + 334.5500000000418, + 334.6000000000418, + 334.6500000000418, + 334.7000000000418, + 334.75000000004184, + 334.80000000004185, + 334.85000000004186, + 334.90000000004187, + 334.9500000000419, + 335.0000000000419, + 335.0500000000419, + 335.1000000000419, + 335.1500000000419, + 335.20000000004194, + 335.25000000004195, + 335.30000000004196, + 335.350000000042, + 335.400000000042, + 335.450000000042, + 335.500000000042, + 335.550000000042, + 335.60000000004203, + 335.65000000004204, + 335.70000000004205, + 335.75000000004206, + 335.8000000000421, + 335.8500000000421, + 335.9000000000421, + 335.9500000000421, + 336.0000000000421, + 336.05000000004213, + 336.10000000004214, + 336.15000000004216, + 336.20000000004217, + 336.2500000000422, + 336.3000000000422, + 336.3500000000422, + 336.4000000000422, + 336.4500000000422, + 336.50000000004223, + 336.55000000004225, + 336.60000000004226, + 336.65000000004227, + 336.7000000000423, + 336.7500000000423, + 336.8000000000423, + 336.8500000000423, + 336.9000000000423, + 336.95000000004234, + 337.00000000004235, + 337.05000000004236, + 337.10000000004237, + 337.1500000000424, + 337.2000000000424, + 337.2500000000424, + 337.3000000000424, + 337.3500000000424, + 337.40000000004244, + 337.45000000004245, + 337.50000000004246, + 337.5500000000425, + 337.6000000000425, + 337.6500000000425, + 337.7000000000425, + 337.7500000000425, + 337.80000000004253, + 337.85000000004254, + 337.90000000004255, + 337.95000000004256, + 338.0000000000426, + 338.0500000000426, + 338.1000000000426, + 338.1500000000426, + 338.2000000000426, + 338.25000000004263, + 338.30000000004264, + 338.35000000004266, + 338.40000000004267, + 338.4500000000427, + 338.5000000000427, + 338.5500000000427, + 338.6000000000427, + 338.6500000000427, + 338.70000000004273, + 338.75000000004275, + 338.80000000004276, + 338.85000000004277, + 338.9000000000428, + 338.9500000000428, + 339.0000000000428, + 339.0500000000428, + 339.1000000000428, + 339.15000000004284, + 339.20000000004285, + 339.25000000004286, + 339.30000000004287, + 339.3500000000429, + 339.4000000000429, + 339.4500000000429, + 339.5000000000429, + 339.5500000000429, + 339.60000000004294, + 339.65000000004295, + 339.70000000004296, + 339.750000000043, + 339.800000000043, + 339.850000000043, + 339.900000000043, + 339.950000000043, + 340.00000000004303, + 340.05000000004304, + 340.10000000004305, + 340.15000000004306, + 340.2000000000431, + 340.2500000000431, + 340.3000000000431, + 340.3500000000431, + 340.4000000000431, + 340.45000000004313, + 340.50000000004314, + 340.55000000004316, + 340.60000000004317, + 340.6500000000432, + 340.7000000000432, + 340.7500000000432, + 340.8000000000432, + 340.8500000000432, + 340.90000000004324, + 340.95000000004325, + 341.00000000004326, + 341.05000000004327, + 341.1000000000433, + 341.1500000000433, + 341.2000000000433, + 341.2500000000433, + 341.3000000000433, + 341.35000000004334, + 341.40000000004335, + 341.45000000004336, + 341.50000000004337, + 341.5500000000434, + 341.6000000000434, + 341.6500000000434, + 341.7000000000434, + 341.7500000000434, + 341.80000000004344, + 341.85000000004345, + 341.90000000004346, + 341.9500000000435, + 342.0000000000435, + 342.0500000000435, + 342.1000000000435, + 342.1500000000435, + 342.20000000004353, + 342.25000000004354, + 342.30000000004355, + 342.35000000004356, + 342.4000000000436, + 342.4500000000436, + 342.5000000000436, + 342.5500000000436, + 342.6000000000436, + 342.65000000004363, + 342.70000000004364, + 342.75000000004366, + 342.80000000004367, + 342.8500000000437, + 342.9000000000437, + 342.9500000000437, + 343.0000000000437, + 343.0500000000437, + 343.10000000004374, + 343.15000000004375, + 343.20000000004376, + 343.25000000004377, + 343.3000000000438, + 343.3500000000438, + 343.4000000000438, + 343.4500000000438, + 343.5000000000438, + 343.55000000004384, + 343.60000000004385, + 343.65000000004386, + 343.7000000000439, + 343.7500000000439, + 343.8000000000439, + 343.8500000000439, + 343.9000000000439, + 343.95000000004393, + 344.00000000004394, + 344.05000000004395, + 344.10000000004396, + 344.150000000044, + 344.200000000044, + 344.250000000044, + 344.300000000044, + 344.350000000044, + 344.40000000004403, + 344.45000000004404, + 344.50000000004405, + 344.55000000004407, + 344.6000000000441, + 344.6500000000441, + 344.7000000000441, + 344.7500000000441, + 344.8000000000441, + 344.85000000004413, + 344.90000000004414, + 344.95000000004416, + 345.00000000004417, + 345.0500000000442, + 345.1000000000442, + 345.1500000000442, + 345.2000000000442, + 345.2500000000442, + 345.30000000004424, + 345.35000000004425, + 345.40000000004426, + 345.45000000004427, + 345.5000000000443, + 345.5500000000443, + 345.6000000000443, + 345.6500000000443, + 345.7000000000443, + 345.75000000004434, + 345.80000000004435, + 345.85000000004436, + 345.9000000000444, + 345.9500000000444, + 346.0000000000444, + 346.0500000000444, + 346.1000000000444, + 346.15000000004443, + 346.20000000004444, + 346.25000000004445, + 346.30000000004446, + 346.3500000000445, + 346.4000000000445, + 346.4500000000445, + 346.5000000000445, + 346.5500000000445, + 346.60000000004453, + 346.65000000004454, + 346.70000000004455, + 346.75000000004457, + 346.8000000000446, + 346.8500000000446, + 346.9000000000446, + 346.9500000000446, + 347.0000000000446, + 347.05000000004463, + 347.10000000004464, + 347.15000000004466, + 347.20000000004467, + 347.2500000000447, + 347.3000000000447, + 347.3500000000447, + 347.4000000000447, + 347.4500000000447, + 347.50000000004474, + 347.55000000004475, + 347.60000000004476, + 347.65000000004477, + 347.7000000000448, + 347.7500000000448, + 347.8000000000448, + 347.8500000000448, + 347.9000000000448, + 347.95000000004484, + 348.00000000004485, + 348.05000000004486, + 348.1000000000449, + 348.1500000000449, + 348.2000000000449, + 348.2500000000449, + 348.3000000000449, + 348.35000000004493, + 348.40000000004494, + 348.45000000004495, + 348.50000000004496, + 348.550000000045, + 348.600000000045, + 348.650000000045, + 348.700000000045, + 348.750000000045, + 348.80000000004503, + 348.85000000004504, + 348.90000000004505, + 348.95000000004507, + 349.0000000000451, + 349.0500000000451, + 349.1000000000451, + 349.1500000000451, + 349.2000000000451, + 349.25000000004513, + 349.30000000004515, + 349.35000000004516, + 349.40000000004517, + 349.4500000000452, + 349.5000000000452, + 349.5500000000452, + 349.6000000000452, + 349.6500000000452, + 349.70000000004524, + 349.75000000004525, + 349.80000000004526, + 349.85000000004527, + 349.9000000000453, + 349.9500000000453, + 350.0000000000453, + 350.0500000000453, + 350.1000000000453, + 350.15000000004534, + 350.20000000004535, + 350.25000000004536, + 350.3000000000454, + 350.3500000000454, + 350.4000000000454, + 350.4500000000454, + 350.5000000000454, + 350.55000000004543, + 350.60000000004544, + 350.65000000004545, + 350.70000000004546, + 350.7500000000455, + 350.8000000000455, + 350.8500000000455, + 350.9000000000455, + 350.9500000000455, + 351.00000000004553, + 351.05000000004554, + 351.10000000004555, + 351.15000000004557, + 351.2000000000456, + 351.2500000000456, + 351.3000000000456, + 351.3500000000456, + 351.4000000000456, + 351.45000000004563, + 351.50000000004565, + 351.55000000004566, + 351.60000000004567, + 351.6500000000457, + 351.7000000000457, + 351.7500000000457, + 351.8000000000457, + 351.8500000000457, + 351.90000000004574, + 351.95000000004575, + 352.00000000004576, + 352.05000000004577, + 352.1000000000458, + 352.1500000000458, + 352.2000000000458, + 352.2500000000458, + 352.3000000000458, + 352.35000000004584, + 352.40000000004585, + 352.45000000004586, + 352.5000000000459, + 352.5500000000459, + 352.6000000000459, + 352.6500000000459, + 352.7000000000459, + 352.75000000004593, + 352.80000000004594, + 352.85000000004595, + 352.90000000004596, + 352.950000000046, + 353.000000000046, + 353.050000000046, + 353.100000000046, + 353.150000000046, + 353.20000000004603, + 353.25000000004604, + 353.30000000004605, + 353.35000000004607, + 353.4000000000461, + 353.4500000000461, + 353.5000000000461, + 353.5500000000461, + 353.6000000000461, + 353.65000000004613, + 353.70000000004615, + 353.75000000004616, + 353.80000000004617, + 353.8500000000462, + 353.9000000000462, + 353.9500000000462, + 354.0000000000462, + 354.0500000000462, + 354.10000000004624, + 354.15000000004625, + 354.20000000004626, + 354.25000000004627, + 354.3000000000463, + 354.3500000000463, + 354.4000000000463, + 354.4500000000463, + 354.5000000000463, + 354.55000000004634, + 354.60000000004635, + 354.65000000004636, + 354.7000000000464, + 354.7500000000464, + 354.8000000000464, + 354.8500000000464, + 354.9000000000464, + 354.95000000004643, + 355.00000000004644, + 355.05000000004645, + 355.10000000004646, + 355.1500000000465, + 355.2000000000465, + 355.2500000000465, + 355.3000000000465, + 355.3500000000465, + 355.40000000004653, + 355.45000000004654, + 355.50000000004655, + 355.55000000004657, + 355.6000000000466, + 355.6500000000466, + 355.7000000000466, + 355.7500000000466, + 355.8000000000466, + 355.85000000004663, + 355.90000000004665, + 355.95000000004666, + 356.00000000004667, + 356.0500000000467, + 356.1000000000467, + 356.1500000000467, + 356.2000000000467, + 356.2500000000467, + 356.30000000004674, + 356.35000000004675, + 356.40000000004676, + 356.45000000004677, + 356.5000000000468, + 356.5500000000468, + 356.6000000000468, + 356.6500000000468, + 356.7000000000468, + 356.75000000004684, + 356.80000000004685, + 356.85000000004686, + 356.9000000000469, + 356.9500000000469, + 357.0000000000469, + 357.0500000000469, + 357.1000000000469, + 357.15000000004693, + 357.20000000004694, + 357.25000000004695, + 357.30000000004696, + 357.350000000047, + 357.400000000047, + 357.450000000047, + 357.500000000047, + 357.550000000047, + 357.60000000004703, + 357.65000000004704, + 357.70000000004705, + 357.75000000004707, + 357.8000000000471, + 357.8500000000471, + 357.9000000000471, + 357.9500000000471, + 358.0000000000471, + 358.05000000004713, + 358.10000000004715, + 358.15000000004716, + 358.20000000004717, + 358.2500000000472, + 358.3000000000472, + 358.3500000000472, + 358.4000000000472, + 358.4500000000472, + 358.50000000004724, + 358.55000000004725, + 358.60000000004726, + 358.65000000004727, + 358.7000000000473, + 358.7500000000473, + 358.8000000000473, + 358.8500000000473, + 358.9000000000473, + 358.95000000004734, + 359.00000000004735, + 359.05000000004736, + 359.1000000000474, + 359.1500000000474, + 359.2000000000474, + 359.2500000000474, + 359.3000000000474, + 359.35000000004743, + 359.40000000004744, + 359.45000000004745, + 359.50000000004746, + 359.5500000000475, + 359.6000000000475, + 359.6500000000475, + 359.7000000000475, + 359.7500000000475, + 359.80000000004753, + 359.85000000004754, + 359.90000000004756, + 359.95000000004757, + 360.0000000000476, + 360.0500000000476, + 360.1000000000476, + 360.1500000000476, + 360.2000000000476, + 360.25000000004763, + 360.30000000004765, + 360.35000000004766, + 360.40000000004767, + 360.4500000000477, + 360.5000000000477, + 360.5500000000477, + 360.6000000000477, + 360.6500000000477, + 360.70000000004774, + 360.75000000004775, + 360.80000000004776, + 360.85000000004777, + 360.9000000000478, + 360.9500000000478, + 361.0000000000478, + 361.0500000000478, + 361.1000000000478, + 361.15000000004784, + 361.20000000004785, + 361.25000000004786, + 361.3000000000479, + 361.3500000000479, + 361.4000000000479, + 361.4500000000479, + 361.5000000000479, + 361.55000000004793, + 361.60000000004794, + 361.65000000004795, + 361.70000000004796, + 361.750000000048, + 361.800000000048, + 361.850000000048, + 361.900000000048, + 361.950000000048, + 362.00000000004803, + 362.05000000004804, + 362.10000000004806, + 362.15000000004807, + 362.2000000000481, + 362.2500000000481, + 362.3000000000481, + 362.3500000000481, + 362.4000000000481, + 362.45000000004814, + 362.50000000004815, + 362.55000000004816, + 362.60000000004817, + 362.6500000000482, + 362.7000000000482, + 362.7500000000482, + 362.8000000000482, + 362.8500000000482, + 362.90000000004824, + 362.95000000004825, + 363.00000000004826, + 363.05000000004827, + 363.1000000000483, + 363.1500000000483, + 363.2000000000483, + 363.2500000000483, + 363.3000000000483, + 363.35000000004834, + 363.40000000004835, + 363.45000000004836, + 363.5000000000484, + 363.5500000000484, + 363.6000000000484, + 363.6500000000484, + 363.7000000000484, + 363.75000000004843, + 363.80000000004844, + 363.85000000004845, + 363.90000000004846, + 363.9500000000485, + 364.0000000000485, + 364.0500000000485, + 364.1000000000485, + 364.1500000000485, + 364.20000000004853, + 364.25000000004854, + 364.30000000004856, + 364.35000000004857, + 364.4000000000486, + 364.4500000000486, + 364.5000000000486, + 364.5500000000486, + 364.6000000000486, + 364.65000000004864, + 364.70000000004865, + 364.75000000004866, + 364.80000000004867, + 364.8500000000487, + 364.9000000000487, + 364.9500000000487, + 365.0000000000487, + 365.0500000000487, + 365.10000000004874, + 365.15000000004875, + 365.20000000004876, + 365.2500000000488, + 365.3000000000488, + 365.3500000000488, + 365.4000000000488, + 365.4500000000488, + 365.50000000004883, + 365.55000000004884, + 365.60000000004885, + 365.65000000004886, + 365.7000000000489, + 365.7500000000489, + 365.8000000000489, + 365.8500000000489, + 365.9000000000489, + 365.95000000004893, + 366.00000000004894, + 366.05000000004895, + 366.10000000004896, + 366.150000000049, + 366.200000000049, + 366.250000000049, + 366.300000000049, + 366.350000000049, + 366.40000000004903, + 366.45000000004904, + 366.50000000004906, + 366.55000000004907, + 366.6000000000491, + 366.6500000000491, + 366.7000000000491, + 366.7500000000491, + 366.8000000000491, + 366.85000000004914, + 366.90000000004915, + 366.95000000004916, + 367.00000000004917, + 367.0500000000492, + 367.1000000000492, + 367.1500000000492, + 367.2000000000492, + 367.2500000000492, + 367.30000000004924, + 367.35000000004925, + 367.40000000004926, + 367.4500000000493, + 367.5000000000493, + 367.5500000000493, + 367.6000000000493, + 367.6500000000493, + 367.70000000004933, + 367.75000000004934, + 367.80000000004935, + 367.85000000004936, + 367.9000000000494, + 367.9500000000494, + 368.0000000000494, + 368.0500000000494, + 368.1000000000494, + 368.15000000004943, + 368.20000000004944, + 368.25000000004945, + 368.30000000004947, + 368.3500000000495, + 368.4000000000495, + 368.4500000000495, + 368.5000000000495, + 368.5500000000495, + 368.60000000004953, + 368.65000000004954, + 368.70000000004956, + 368.75000000004957, + 368.8000000000496, + 368.8500000000496, + 368.9000000000496, + 368.9500000000496, + 369.0000000000496, + 369.05000000004964, + 369.10000000004965, + 369.15000000004966, + 369.20000000004967, + 369.2500000000497, + 369.3000000000497, + 369.3500000000497, + 369.4000000000497, + 369.4500000000497, + 369.50000000004974, + 369.55000000004975, + 369.60000000004976, + 369.6500000000498, + 369.7000000000498, + 369.7500000000498, + 369.8000000000498, + 369.8500000000498, + 369.90000000004983, + 369.95000000004984, + 370.00000000004985, + 370.05000000004986, + 370.1000000000499, + 370.1500000000499, + 370.2000000000499, + 370.2500000000499, + 370.3000000000499, + 370.35000000004993, + 370.40000000004994, + 370.45000000004995, + 370.50000000004997, + 370.55000000005, + 370.60000000005, + 370.65000000005, + 370.70000000005, + 370.75000000005, + 370.80000000005003, + 370.85000000005004, + 370.90000000005006, + 370.95000000005007, + 371.0000000000501, + 371.0500000000501, + 371.1000000000501, + 371.1500000000501, + 371.2000000000501, + 371.25000000005014, + 371.30000000005015, + 371.35000000005016, + 371.40000000005017, + 371.4500000000502, + 371.5000000000502, + 371.5500000000502, + 371.6000000000502, + 371.6500000000502, + 371.70000000005024, + 371.75000000005025, + 371.80000000005026, + 371.8500000000503, + 371.9000000000503, + 371.9500000000503, + 372.0000000000503, + 372.0500000000503, + 372.10000000005033, + 372.15000000005034, + 372.20000000005035, + 372.25000000005036, + 372.3000000000504, + 372.3500000000504, + 372.4000000000504, + 372.4500000000504, + 372.5000000000504, + 372.55000000005043, + 372.60000000005044, + 372.65000000005045, + 372.70000000005047, + 372.7500000000505, + 372.8000000000505, + 372.8500000000505, + 372.9000000000505, + 372.9500000000505, + 373.00000000005053, + 373.05000000005055, + 373.10000000005056, + 373.15000000005057, + 373.2000000000506, + 373.2500000000506, + 373.3000000000506, + 373.3500000000506, + 373.4000000000506, + 373.45000000005064, + 373.50000000005065, + 373.55000000005066, + 373.60000000005067, + 373.6500000000507, + 373.7000000000507, + 373.7500000000507, + 373.8000000000507, + 373.8500000000507, + 373.90000000005074, + 373.95000000005075, + 374.00000000005076, + 374.0500000000508, + 374.1000000000508, + 374.1500000000508, + 374.2000000000508, + 374.2500000000508, + 374.30000000005083, + 374.35000000005084, + 374.40000000005085, + 374.45000000005086, + 374.5000000000509, + 374.5500000000509, + 374.6000000000509, + 374.6500000000509, + 374.7000000000509, + 374.75000000005093, + 374.80000000005094, + 374.85000000005095, + 374.90000000005097, + 374.950000000051, + 375.000000000051, + 375.050000000051, + 375.100000000051, + 375.150000000051, + 375.20000000005103, + 375.25000000005105, + 375.30000000005106, + 375.35000000005107, + 375.4000000000511, + 375.4500000000511, + 375.5000000000511, + 375.5500000000511, + 375.6000000000511, + 375.65000000005114, + 375.70000000005115, + 375.75000000005116, + 375.80000000005117, + 375.8500000000512, + 375.9000000000512, + 375.9500000000512, + 376.0000000000512, + 376.0500000000512, + 376.10000000005124, + 376.15000000005125, + 376.20000000005126, + 376.2500000000513, + 376.3000000000513, + 376.3500000000513, + 376.4000000000513, + 376.4500000000513, + 376.50000000005133, + 376.55000000005134, + 376.60000000005135, + 376.65000000005136, + 376.7000000000514, + 376.7500000000514, + 376.8000000000514, + 376.8500000000514, + 376.9000000000514, + 376.95000000005143, + 377.00000000005144, + 377.05000000005145, + 377.10000000005147, + 377.1500000000515, + 377.2000000000515, + 377.2500000000515, + 377.3000000000515, + 377.3500000000515, + 377.40000000005153, + 377.45000000005155, + 377.50000000005156, + 377.55000000005157, + 377.6000000000516, + 377.6500000000516, + 377.7000000000516, + 377.7500000000516, + 377.8000000000516, + 377.85000000005164, + 377.90000000005165, + 377.95000000005166, + 378.00000000005167, + 378.0500000000517, + 378.1000000000517, + 378.1500000000517, + 378.2000000000517, + 378.2500000000517, + 378.30000000005174, + 378.35000000005175, + 378.40000000005176, + 378.4500000000518, + 378.5000000000518, + 378.5500000000518, + 378.6000000000518, + 378.6500000000518, + 378.70000000005183, + 378.75000000005184, + 378.80000000005185, + 378.85000000005186, + 378.9000000000519, + 378.9500000000519, + 379.0000000000519, + 379.0500000000519, + 379.1000000000519, + 379.15000000005193, + 379.20000000005194, + 379.25000000005195, + 379.30000000005197, + 379.350000000052, + 379.400000000052, + 379.450000000052, + 379.500000000052, + 379.550000000052, + 379.60000000005203, + 379.65000000005205, + 379.70000000005206, + 379.75000000005207, + 379.8000000000521, + 379.8500000000521, + 379.9000000000521, + 379.9500000000521, + 380.0000000000521, + 380.05000000005214, + 380.10000000005215, + 380.15000000005216, + 380.20000000005217, + 380.2500000000522, + 380.3000000000522, + 380.3500000000522, + 380.4000000000522, + 380.4500000000522, + 380.50000000005224, + 380.55000000005225, + 380.60000000005226, + 380.6500000000523, + 380.7000000000523, + 380.7500000000523, + 380.8000000000523, + 380.8500000000523, + 380.90000000005233, + 380.95000000005234, + 381.00000000005235, + 381.05000000005236, + 381.1000000000524, + 381.1500000000524, + 381.2000000000524, + 381.2500000000524, + 381.3000000000524, + 381.35000000005243, + 381.40000000005244, + 381.45000000005246, + 381.50000000005247, + 381.5500000000525, + 381.6000000000525, + 381.6500000000525, + 381.7000000000525, + 381.7500000000525, + 381.80000000005253, + 381.85000000005255, + 381.90000000005256, + 381.95000000005257, + 382.0000000000526, + 382.0500000000526, + 382.1000000000526, + 382.1500000000526, + 382.2000000000526, + 382.25000000005264, + 382.30000000005265, + 382.35000000005266, + 382.40000000005267, + 382.4500000000527, + 382.5000000000527, + 382.5500000000527, + 382.6000000000527, + 382.6500000000527, + 382.70000000005274, + 382.75000000005275, + 382.80000000005276, + 382.8500000000528, + 382.9000000000528, + 382.9500000000528, + 383.0000000000528, + 383.0500000000528, + 383.10000000005283, + 383.15000000005284, + 383.20000000005285, + 383.25000000005286, + 383.3000000000529, + 383.3500000000529, + 383.4000000000529, + 383.4500000000529, + 383.5000000000529, + 383.55000000005293, + 383.60000000005294, + 383.65000000005296, + 383.70000000005297, + 383.750000000053, + 383.800000000053, + 383.850000000053, + 383.900000000053, + 383.950000000053, + 384.00000000005303, + 384.05000000005305, + 384.10000000005306, + 384.15000000005307, + 384.2000000000531, + 384.2500000000531, + 384.3000000000531, + 384.3500000000531, + 384.4000000000531, + 384.45000000005314, + 384.50000000005315, + 384.55000000005316, + 384.60000000005317, + 384.6500000000532, + 384.7000000000532, + 384.7500000000532, + 384.8000000000532, + 384.8500000000532, + 384.90000000005324, + 384.95000000005325, + 385.00000000005326, + 385.0500000000533, + 385.1000000000533, + 385.1500000000533, + 385.2000000000533, + 385.2500000000533, + 385.30000000005333, + 385.35000000005334, + 385.40000000005335, + 385.45000000005336, + 385.5000000000534, + 385.5500000000534, + 385.6000000000534, + 385.6500000000534, + 385.7000000000534, + 385.75000000005343, + 385.80000000005344, + 385.85000000005346, + 385.90000000005347, + 385.9500000000535, + 386.0000000000535, + 386.0500000000535, + 386.1000000000535, + 386.1500000000535, + 386.20000000005354, + 386.25000000005355, + 386.30000000005356, + 386.35000000005357, + 386.4000000000536, + 386.4500000000536, + 386.5000000000536, + 386.5500000000536, + 386.6000000000536, + 386.65000000005364, + 386.70000000005365, + 386.75000000005366, + 386.80000000005367, + 386.8500000000537, + 386.9000000000537, + 386.9500000000537, + 387.0000000000537, + 387.0500000000537, + 387.10000000005374, + 387.15000000005375, + 387.20000000005376, + 387.2500000000538, + 387.3000000000538, + 387.3500000000538, + 387.4000000000538, + 387.4500000000538, + 387.50000000005383, + 387.55000000005384, + 387.60000000005385, + 387.65000000005386, + 387.7000000000539, + 387.7500000000539, + 387.8000000000539, + 387.8500000000539, + 387.9000000000539, + 387.95000000005393, + 388.00000000005394, + 388.05000000005396, + 388.10000000005397, + 388.150000000054, + 388.200000000054, + 388.250000000054, + 388.300000000054, + 388.350000000054, + 388.40000000005404, + 388.45000000005405, + 388.50000000005406, + 388.55000000005407, + 388.6000000000541, + 388.6500000000541, + 388.7000000000541, + 388.7500000000541, + 388.8000000000541, + 388.85000000005414, + 388.90000000005415, + 388.95000000005416, + 389.0000000000542, + 389.0500000000542, + 389.1000000000542, + 389.1500000000542, + 389.2000000000542, + 389.25000000005423, + 389.30000000005424, + 389.35000000005425, + 389.40000000005426, + 389.4500000000543, + 389.5000000000543, + 389.5500000000543, + 389.6000000000543, + 389.6500000000543, + 389.70000000005433, + 389.75000000005434, + 389.80000000005435, + 389.85000000005437, + 389.9000000000544, + 389.9500000000544, + 390.0000000000544, + 390.0500000000544, + 390.1000000000544, + 390.15000000005443, + 390.20000000005444, + 390.25000000005446, + 390.30000000005447, + 390.3500000000545, + 390.4000000000545, + 390.4500000000545, + 390.5000000000545, + 390.5500000000545, + 390.60000000005454, + 390.65000000005455, + 390.70000000005456, + 390.75000000005457, + 390.8000000000546, + 390.8500000000546, + 390.9000000000546, + 390.9500000000546, + 391.0000000000546, + 391.05000000005464, + 391.10000000005465, + 391.15000000005466, + 391.2000000000547, + 391.2500000000547, + 391.3000000000547, + 391.3500000000547, + 391.4000000000547, + 391.45000000005473, + 391.50000000005474, + 391.55000000005475, + 391.60000000005476, + 391.6500000000548, + 391.7000000000548, + 391.7500000000548, + 391.8000000000548, + 391.8500000000548, + 391.90000000005483, + 391.95000000005484, + 392.00000000005485, + 392.05000000005487, + 392.1000000000549, + 392.1500000000549, + 392.2000000000549, + 392.2500000000549, + 392.3000000000549, + 392.35000000005493, + 392.40000000005494, + 392.45000000005496, + 392.50000000005497, + 392.550000000055, + 392.600000000055, + 392.650000000055, + 392.700000000055, + 392.750000000055, + 392.80000000005504, + 392.85000000005505, + 392.90000000005506, + 392.95000000005507, + 393.0000000000551, + 393.0500000000551, + 393.1000000000551, + 393.1500000000551, + 393.2000000000551, + 393.25000000005514, + 393.30000000005515, + 393.35000000005516, + 393.4000000000552, + 393.4500000000552, + 393.5000000000552, + 393.5500000000552, + 393.6000000000552, + 393.65000000005523, + 393.70000000005524, + 393.75000000005525, + 393.80000000005526, + 393.8500000000553, + 393.9000000000553, + 393.9500000000553, + 394.0000000000553, + 394.0500000000553, + 394.10000000005533, + 394.15000000005534, + 394.20000000005535, + 394.25000000005537, + 394.3000000000554, + 394.3500000000554, + 394.4000000000554, + 394.4500000000554, + 394.5000000000554, + 394.55000000005543, + 394.60000000005545, + 394.65000000005546, + 394.70000000005547, + 394.7500000000555, + 394.8000000000555, + 394.8500000000555, + 394.9000000000555, + 394.9500000000555, + 395.00000000005554, + 395.05000000005555, + 395.10000000005556, + 395.15000000005557, + 395.2000000000556, + 395.2500000000556, + 395.3000000000556, + 395.3500000000556, + 395.4000000000556, + 395.45000000005564, + 395.50000000005565, + 395.55000000005566, + 395.6000000000557, + 395.6500000000557, + 395.7000000000557, + 395.7500000000557, + 395.8000000000557, + 395.85000000005573, + 395.90000000005574, + 395.95000000005575, + 396.00000000005576, + 396.0500000000558, + 396.1000000000558, + 396.1500000000558, + 396.2000000000558, + 396.2500000000558, + 396.30000000005583, + 396.35000000005584, + 396.40000000005585, + 396.45000000005587, + 396.5000000000559, + 396.5500000000559, + 396.6000000000559, + 396.6500000000559, + 396.7000000000559, + 396.75000000005593, + 396.80000000005595, + 396.85000000005596, + 396.90000000005597, + 396.950000000056, + 397.000000000056, + 397.050000000056, + 397.100000000056, + 397.150000000056, + 397.20000000005604, + 397.25000000005605, + 397.30000000005606, + 397.35000000005607, + 397.4000000000561, + 397.4500000000561, + 397.5000000000561, + 397.5500000000561, + 397.6000000000561, + 397.65000000005614, + 397.70000000005615, + 397.75000000005616, + 397.8000000000562, + 397.8500000000562, + 397.9000000000562, + 397.9500000000562, + 398.0000000000562, + 398.05000000005623, + 398.10000000005624, + 398.15000000005625, + 398.20000000005626, + 398.2500000000563, + 398.3000000000563, + 398.3500000000563, + 398.4000000000563, + 398.4500000000563, + 398.50000000005633, + 398.55000000005634, + 398.60000000005635, + 398.65000000005637, + 398.7000000000564, + 398.7500000000564, + 398.8000000000564, + 398.8500000000564, + 398.9000000000564, + 398.95000000005643, + 399.00000000005645, + 399.05000000005646, + 399.10000000005647, + 399.1500000000565, + 399.2000000000565, + 399.2500000000565, + 399.3000000000565, + 399.3500000000565, + 399.40000000005654, + 399.45000000005655, + 399.50000000005656, + 399.55000000005657, + 399.6000000000566, + 399.6500000000566, + 399.7000000000566, + 399.7500000000566, + 399.8000000000566, + 399.85000000005664, + 399.90000000005665, + 399.95000000005666, + 400.0000000000567, + 400.0500000000567, + 400.1000000000567, + 400.1500000000567, + 400.2000000000567, + 400.25000000005673, + 400.30000000005674, + 400.35000000005675, + 400.40000000005676, + 400.4500000000568, + 400.5000000000568, + 400.5500000000568, + 400.6000000000568, + 400.6500000000568, + 400.70000000005683, + 400.75000000005684, + 400.80000000005685, + 400.85000000005687, + 400.9000000000569, + 400.9500000000569, + 401.0000000000569, + 401.0500000000569, + 401.1000000000569, + 401.15000000005693, + 401.20000000005695, + 401.25000000005696, + 401.30000000005697, + 401.350000000057, + 401.400000000057, + 401.450000000057, + 401.500000000057, + 401.550000000057, + 401.60000000005704, + 401.65000000005705, + 401.70000000005706, + 401.75000000005707, + 401.8000000000571, + 401.8500000000571, + 401.9000000000571, + 401.9500000000571, + 402.0000000000571, + 402.05000000005714, + 402.10000000005715, + 402.15000000005716, + 402.2000000000572, + 402.2500000000572, + 402.3000000000572, + 402.3500000000572, + 402.4000000000572, + 402.45000000005723, + 402.50000000005724, + 402.55000000005725, + 402.60000000005726, + 402.6500000000573, + 402.7000000000573, + 402.7500000000573, + 402.8000000000573, + 402.8500000000573, + 402.90000000005733, + 402.95000000005734, + 403.00000000005736, + 403.05000000005737, + 403.1000000000574, + 403.1500000000574, + 403.2000000000574, + 403.2500000000574, + 403.3000000000574, + 403.35000000005743, + 403.40000000005745, + 403.45000000005746, + 403.50000000005747, + 403.5500000000575, + 403.6000000000575, + 403.6500000000575, + 403.7000000000575, + 403.7500000000575, + 403.80000000005754, + 403.85000000005755, + 403.90000000005756, + 403.95000000005757, + 404.0000000000576, + 404.0500000000576, + 404.1000000000576, + 404.1500000000576, + 404.2000000000576, + 404.25000000005764, + 404.30000000005765, + 404.35000000005766, + 404.4000000000577, + 404.4500000000577, + 404.5000000000577, + 404.5500000000577, + 404.6000000000577, + 404.65000000005773, + 404.70000000005774, + 404.75000000005775, + 404.80000000005776, + 404.8500000000578, + 404.9000000000578, + 404.9500000000578, + 405.0000000000578, + 405.0500000000578, + 405.10000000005783, + 405.15000000005784, + 405.20000000005786, + 405.25000000005787, + 405.3000000000579, + 405.3500000000579, + 405.4000000000579, + 405.4500000000579, + 405.5000000000579, + 405.55000000005793, + 405.60000000005795, + 405.65000000005796, + 405.70000000005797, + 405.750000000058, + 405.800000000058, + 405.850000000058, + 405.900000000058, + 405.950000000058, + 406.00000000005804, + 406.05000000005805, + 406.10000000005806, + 406.15000000005807, + 406.2000000000581, + 406.2500000000581, + 406.3000000000581, + 406.3500000000581, + 406.4000000000581, + 406.45000000005814, + 406.50000000005815, + 406.55000000005816, + 406.6000000000582, + 406.6500000000582, + 406.7000000000582, + 406.7500000000582, + 406.8000000000582, + 406.85000000005823, + 406.90000000005824, + 406.95000000005825, + 407.00000000005826, + 407.0500000000583, + 407.1000000000583, + 407.1500000000583, + 407.2000000000583, + 407.2500000000583, + 407.30000000005833, + 407.35000000005834, + 407.40000000005836, + 407.45000000005837, + 407.5000000000584, + 407.5500000000584, + 407.6000000000584, + 407.6500000000584, + 407.7000000000584, + 407.75000000005844, + 407.80000000005845, + 407.85000000005846, + 407.90000000005847, + 407.9500000000585, + 408.0000000000585, + 408.0500000000585, + 408.1000000000585, + 408.1500000000585, + 408.20000000005854, + 408.25000000005855, + 408.30000000005856, + 408.35000000005857, + 408.4000000000586, + 408.4500000000586, + 408.5000000000586, + 408.5500000000586, + 408.6000000000586, + 408.65000000005864, + 408.70000000005865, + 408.75000000005866, + 408.8000000000587, + 408.8500000000587, + 408.9000000000587, + 408.9500000000587, + 409.0000000000587, + 409.05000000005873, + 409.10000000005874, + 409.15000000005875, + 409.20000000005876, + 409.2500000000588, + 409.3000000000588, + 409.3500000000588, + 409.4000000000588, + 409.4500000000588, + 409.50000000005883, + 409.55000000005884, + 409.60000000005886, + 409.65000000005887, + 409.7000000000589, + 409.7500000000589, + 409.8000000000589, + 409.8500000000589, + 409.9000000000589, + 409.95000000005894, + 410.00000000005895, + 410.05000000005896, + 410.10000000005897, + 410.150000000059, + 410.200000000059, + 410.250000000059, + 410.300000000059, + 410.350000000059, + 410.40000000005904, + 410.45000000005905, + 410.50000000005906, + 410.5500000000591, + 410.6000000000591, + 410.6500000000591, + 410.7000000000591, + 410.7500000000591, + 410.80000000005913, + 410.85000000005914, + 410.90000000005915, + 410.95000000005916, + 411.0000000000592, + 411.0500000000592, + 411.1000000000592, + 411.1500000000592, + 411.2000000000592, + 411.25000000005923, + 411.30000000005924, + 411.35000000005925, + 411.40000000005926, + 411.4500000000593, + 411.5000000000593, + 411.5500000000593, + 411.6000000000593, + 411.6500000000593, + 411.70000000005933, + 411.75000000005934, + 411.80000000005936, + 411.85000000005937, + 411.9000000000594, + 411.9500000000594, + 412.0000000000594, + 412.0500000000594, + 412.1000000000594, + 412.15000000005944, + 412.20000000005945, + 412.25000000005946, + 412.30000000005947, + 412.3500000000595, + 412.4000000000595, + 412.4500000000595, + 412.5000000000595, + 412.5500000000595, + 412.60000000005954, + 412.65000000005955, + 412.70000000005956, + 412.7500000000596, + 412.8000000000596, + 412.8500000000596, + 412.9000000000596, + 412.9500000000596, + 413.00000000005963, + 413.05000000005964, + 413.10000000005965, + 413.15000000005966, + 413.2000000000597, + 413.2500000000597, + 413.3000000000597, + 413.3500000000597, + 413.4000000000597, + 413.45000000005973, + 413.50000000005974, + 413.55000000005975, + 413.60000000005977, + 413.6500000000598, + 413.7000000000598, + 413.7500000000598, + 413.8000000000598, + 413.8500000000598, + 413.90000000005983, + 413.95000000005984, + 414.00000000005986, + 414.05000000005987, + 414.1000000000599, + 414.1500000000599, + 414.2000000000599, + 414.2500000000599, + 414.3000000000599, + 414.35000000005994, + 414.40000000005995, + 414.45000000005996, + 414.50000000005997, + 414.55000000006, + 414.60000000006, + 414.65000000006, + 414.70000000006, + 414.75000000006, + 414.80000000006004, + 414.85000000006005, + 414.90000000006006, + 414.9500000000601, + 415.0000000000601, + 415.0500000000601, + 415.1000000000601, + 415.1500000000601, + 415.20000000006013, + 415.25000000006014, + 415.30000000006015, + 415.35000000006016, + 415.4000000000602, + 415.4500000000602, + 415.5000000000602, + 415.5500000000602, + 415.6000000000602, + 415.65000000006023, + 415.70000000006024, + 415.75000000006025, + 415.80000000006027, + 415.8500000000603, + 415.9000000000603, + 415.9500000000603, + 416.0000000000603, + 416.0500000000603, + 416.10000000006033, + 416.15000000006034, + 416.20000000006036, + 416.25000000006037, + 416.3000000000604, + 416.3500000000604, + 416.4000000000604, + 416.4500000000604, + 416.5000000000604, + 416.55000000006044, + 416.60000000006045, + 416.65000000006046, + 416.70000000006047, + 416.7500000000605, + 416.8000000000605, + 416.8500000000605, + 416.9000000000605, + 416.9500000000605, + 417.00000000006054, + 417.05000000006055, + 417.10000000006056, + 417.1500000000606, + 417.2000000000606, + 417.2500000000606, + 417.3000000000606, + 417.3500000000606, + 417.40000000006063, + 417.45000000006064, + 417.50000000006065, + 417.55000000006066, + 417.6000000000607, + 417.6500000000607, + 417.7000000000607, + 417.7500000000607, + 417.8000000000607, + 417.85000000006073, + 417.90000000006074, + 417.95000000006075, + 418.00000000006077, + 418.0500000000608, + 418.1000000000608, + 418.1500000000608, + 418.2000000000608, + 418.2500000000608, + 418.30000000006083, + 418.35000000006085, + 418.40000000006086, + 418.45000000006087, + 418.5000000000609, + 418.5500000000609, + 418.6000000000609, + 418.6500000000609, + 418.7000000000609, + 418.75000000006094, + 418.80000000006095, + 418.85000000006096, + 418.90000000006097, + 418.950000000061, + 419.000000000061, + 419.050000000061, + 419.100000000061, + 419.150000000061, + 419.20000000006104, + 419.25000000006105, + 419.30000000006106, + 419.3500000000611, + 419.4000000000611, + 419.4500000000611, + 419.5000000000611, + 419.5500000000611, + 419.60000000006113, + 419.65000000006114, + 419.70000000006115, + 419.75000000006116, + 419.8000000000612, + 419.8500000000612, + 419.9000000000612, + 419.9500000000612, + 420.0000000000612, + 420.05000000006123, + 420.10000000006124, + 420.15000000006125, + 420.20000000006127, + 420.2500000000613, + 420.3000000000613, + 420.3500000000613, + 420.4000000000613, + 420.4500000000613, + 420.50000000006133, + 420.55000000006135, + 420.60000000006136, + 420.65000000006137, + 420.7000000000614, + 420.7500000000614, + 420.8000000000614, + 420.8500000000614, + 420.9000000000614, + 420.95000000006144, + 421.00000000006145, + 421.05000000006146, + 421.10000000006147, + 421.1500000000615, + 421.2000000000615, + 421.2500000000615, + 421.3000000000615, + 421.3500000000615, + 421.40000000006154, + 421.45000000006155, + 421.50000000006156, + 421.5500000000616, + 421.6000000000616, + 421.6500000000616, + 421.7000000000616, + 421.7500000000616, + 421.80000000006163, + 421.85000000006164, + 421.90000000006165, + 421.95000000006166, + 422.0000000000617, + 422.0500000000617, + 422.1000000000617, + 422.1500000000617, + 422.2000000000617, + 422.25000000006173, + 422.30000000006174, + 422.35000000006175, + 422.40000000006177, + 422.4500000000618, + 422.5000000000618, + 422.5500000000618, + 422.6000000000618, + 422.6500000000618, + 422.70000000006183, + 422.75000000006185, + 422.80000000006186, + 422.85000000006187, + 422.9000000000619, + 422.9500000000619, + 423.0000000000619, + 423.0500000000619, + 423.1000000000619, + 423.15000000006194, + 423.20000000006195, + 423.25000000006196, + 423.30000000006197, + 423.350000000062, + 423.400000000062, + 423.450000000062, + 423.500000000062, + 423.550000000062, + 423.60000000006204, + 423.65000000006205, + 423.70000000006206, + 423.7500000000621, + 423.8000000000621, + 423.8500000000621, + 423.9000000000621, + 423.9500000000621, + 424.00000000006213, + 424.05000000006214, + 424.10000000006215, + 424.15000000006216, + 424.2000000000622, + 424.2500000000622, + 424.3000000000622, + 424.3500000000622, + 424.4000000000622, + 424.45000000006223, + 424.50000000006224, + 424.55000000006225, + 424.60000000006227, + 424.6500000000623, + 424.7000000000623, + 424.7500000000623, + 424.8000000000623, + 424.8500000000623, + 424.90000000006233, + 424.95000000006235, + 425.00000000006236, + 425.05000000006237, + 425.1000000000624, + 425.1500000000624, + 425.2000000000624, + 425.2500000000624, + 425.3000000000624, + 425.35000000006244, + 425.40000000006245, + 425.45000000006246, + 425.50000000006247, + 425.5500000000625, + 425.6000000000625, + 425.6500000000625, + 425.7000000000625, + 425.7500000000625, + 425.80000000006254, + 425.85000000006255, + 425.90000000006256, + 425.9500000000626, + 426.0000000000626, + 426.0500000000626, + 426.1000000000626, + 426.1500000000626, + 426.20000000006263, + 426.25000000006264, + 426.30000000006265, + 426.35000000006266, + 426.4000000000627, + 426.4500000000627, + 426.5000000000627, + 426.5500000000627, + 426.6000000000627, + 426.65000000006273, + 426.70000000006274, + 426.75000000006276, + 426.80000000006277, + 426.8500000000628, + 426.9000000000628, + 426.9500000000628, + 427.0000000000628, + 427.0500000000628, + 427.10000000006283, + 427.15000000006285, + 427.20000000006286, + 427.25000000006287, + 427.3000000000629, + 427.3500000000629, + 427.4000000000629, + 427.4500000000629, + 427.5000000000629, + 427.55000000006294, + 427.60000000006295, + 427.65000000006296, + 427.70000000006297, + 427.750000000063, + 427.800000000063, + 427.850000000063, + 427.900000000063, + 427.950000000063, + 428.00000000006304, + 428.05000000006305, + 428.10000000006306, + 428.1500000000631, + 428.2000000000631, + 428.2500000000631, + 428.3000000000631, + 428.3500000000631, + 428.40000000006313, + 428.45000000006314, + 428.50000000006315, + 428.55000000006316, + 428.6000000000632, + 428.6500000000632, + 428.7000000000632, + 428.7500000000632, + 428.8000000000632, + 428.85000000006323, + 428.90000000006324, + 428.95000000006326, + 429.00000000006327, + 429.0500000000633, + 429.1000000000633, + 429.1500000000633, + 429.2000000000633, + 429.2500000000633, + 429.30000000006333, + 429.35000000006335, + 429.40000000006336, + 429.45000000006337, + 429.5000000000634, + 429.5500000000634, + 429.6000000000634, + 429.6500000000634, + 429.7000000000634, + 429.75000000006344, + 429.80000000006345, + 429.85000000006346, + 429.90000000006347, + 429.9500000000635, + 430.0000000000635, + 430.0500000000635, + 430.1000000000635, + 430.1500000000635, + 430.20000000006354, + 430.25000000006355, + 430.30000000006356, + 430.3500000000636, + 430.4000000000636, + 430.4500000000636, + 430.5000000000636, + 430.5500000000636, + 430.60000000006363, + 430.65000000006364, + 430.70000000006365, + 430.75000000006366, + 430.8000000000637, + 430.8500000000637, + 430.9000000000637, + 430.9500000000637, + 431.0000000000637, + 431.05000000006373, + 431.10000000006374, + 431.15000000006376, + 431.20000000006377, + 431.2500000000638, + 431.3000000000638, + 431.3500000000638, + 431.4000000000638, + 431.4500000000638, + 431.50000000006384, + 431.55000000006385, + 431.60000000006386, + 431.65000000006387, + 431.7000000000639, + 431.7500000000639, + 431.8000000000639, + 431.8500000000639, + 431.9000000000639, + 431.95000000006394, + 432.00000000006395, + 432.05000000006396, + 432.100000000064, + 432.150000000064, + 432.200000000064, + 432.250000000064, + 432.300000000064, + 432.35000000006403, + 432.40000000006404, + 432.45000000006405, + 432.50000000006406, + 432.5500000000641, + 432.6000000000641, + 432.6500000000641, + 432.7000000000641, + 432.7500000000641, + 432.80000000006413, + 432.85000000006414, + 432.90000000006415, + 432.95000000006416, + 433.0000000000642, + 433.0500000000642, + 433.1000000000642, + 433.1500000000642, + 433.2000000000642, + 433.25000000006423, + 433.30000000006424, + 433.35000000006426, + 433.40000000006427, + 433.4500000000643, + 433.5000000000643, + 433.5500000000643, + 433.6000000000643, + 433.6500000000643, + 433.70000000006434, + 433.75000000006435, + 433.80000000006436, + 433.85000000006437, + 433.9000000000644, + 433.9500000000644, + 434.0000000000644, + 434.0500000000644, + 434.1000000000644, + 434.15000000006444, + 434.20000000006445, + 434.25000000006446, + 434.3000000000645, + 434.3500000000645, + 434.4000000000645, + 434.4500000000645, + 434.5000000000645, + 434.55000000006453, + 434.60000000006454, + 434.65000000006455, + 434.70000000006456, + 434.7500000000646, + 434.8000000000646, + 434.8500000000646, + 434.9000000000646, + 434.9500000000646, + 435.00000000006463, + 435.05000000006464, + 435.10000000006465, + 435.15000000006467, + 435.2000000000647, + 435.2500000000647, + 435.3000000000647, + 435.3500000000647, + 435.4000000000647, + 435.45000000006473, + 435.50000000006474, + 435.55000000006476, + 435.60000000006477, + 435.6500000000648, + 435.7000000000648, + 435.7500000000648, + 435.8000000000648, + 435.8500000000648, + 435.90000000006484, + 435.95000000006485, + 436.00000000006486, + 436.05000000006487, + 436.1000000000649, + 436.1500000000649, + 436.2000000000649, + 436.2500000000649, + 436.3000000000649, + 436.35000000006494, + 436.40000000006495, + 436.45000000006496, + 436.500000000065, + 436.550000000065, + 436.600000000065, + 436.650000000065, + 436.700000000065, + 436.75000000006503, + 436.80000000006504, + 436.85000000006505, + 436.90000000006506, + 436.9500000000651, + 437.0000000000651, + 437.0500000000651, + 437.1000000000651, + 437.1500000000651, + 437.20000000006513, + 437.25000000006514, + 437.30000000006515, + 437.35000000006517, + 437.4000000000652, + 437.4500000000652, + 437.5000000000652, + 437.5500000000652, + 437.6000000000652, + 437.65000000006523, + 437.70000000006524, + 437.75000000006526, + 437.80000000006527, + 437.8500000000653, + 437.9000000000653, + 437.9500000000653, + 438.0000000000653, + 438.0500000000653, + 438.10000000006534, + 438.15000000006535, + 438.20000000006536, + 438.25000000006537, + 438.3000000000654, + 438.3500000000654, + 438.4000000000654, + 438.4500000000654, + 438.5000000000654, + 438.55000000006544, + 438.60000000006545, + 438.65000000006546, + 438.7000000000655, + 438.7500000000655, + 438.8000000000655, + 438.8500000000655, + 438.9000000000655, + 438.95000000006553, + 439.00000000006554, + 439.05000000006555, + 439.10000000006556, + 439.1500000000656, + 439.2000000000656, + 439.2500000000656, + 439.3000000000656, + 439.3500000000656, + 439.40000000006563, + 439.45000000006564, + 439.50000000006565, + 439.55000000006567, + 439.6000000000657, + 439.6500000000657, + 439.7000000000657, + 439.7500000000657, + 439.8000000000657, + 439.85000000006573, + 439.90000000006575, + 439.95000000006576, + 440.00000000006577, + 440.0500000000658, + 440.1000000000658, + 440.1500000000658, + 440.2000000000658, + 440.2500000000658, + 440.30000000006584, + 440.35000000006585, + 440.40000000006586, + 440.45000000006587, + 440.5000000000659, + 440.5500000000659, + 440.6000000000659, + 440.6500000000659, + 440.7000000000659, + 440.75000000006594, + 440.80000000006595, + 440.85000000006596, + 440.900000000066, + 440.950000000066, + 441.000000000066, + 441.050000000066, + 441.100000000066, + 441.15000000006603, + 441.20000000006604, + 441.25000000006605, + 441.30000000006606, + 441.3500000000661, + 441.4000000000661, + 441.4500000000661, + 441.5000000000661, + 441.5500000000661, + 441.60000000006613, + 441.65000000006614, + 441.70000000006615, + 441.75000000006617, + 441.8000000000662, + 441.8500000000662, + 441.9000000000662, + 441.9500000000662, + 442.0000000000662, + 442.05000000006623, + 442.10000000006625, + 442.15000000006626, + 442.20000000006627, + 442.2500000000663, + 442.3000000000663, + 442.3500000000663, + 442.4000000000663, + 442.4500000000663, + 442.50000000006634, + 442.55000000006635, + 442.60000000006636, + 442.65000000006637, + 442.7000000000664, + 442.7500000000664, + 442.8000000000664, + 442.8500000000664, + 442.9000000000664, + 442.95000000006644, + 443.00000000006645, + 443.05000000006646, + 443.1000000000665, + 443.1500000000665, + 443.2000000000665, + 443.2500000000665, + 443.3000000000665, + 443.35000000006653, + 443.40000000006654, + 443.45000000006655, + 443.50000000006656, + 443.5500000000666, + 443.6000000000666, + 443.6500000000666, + 443.7000000000666, + 443.7500000000666, + 443.80000000006663, + 443.85000000006664, + 443.90000000006665, + 443.95000000006667, + 444.0000000000667, + 444.0500000000667, + 444.1000000000667, + 444.1500000000667, + 444.2000000000667, + 444.25000000006673, + 444.30000000006675, + 444.35000000006676, + 444.40000000006677, + 444.4500000000668, + 444.5000000000668, + 444.5500000000668, + 444.6000000000668, + 444.6500000000668, + 444.70000000006684, + 444.75000000006685, + 444.80000000006686, + 444.85000000006687, + 444.9000000000669, + 444.9500000000669, + 445.0000000000669, + 445.0500000000669, + 445.1000000000669, + 445.15000000006694, + 445.20000000006695, + 445.25000000006696, + 445.300000000067, + 445.350000000067, + 445.400000000067, + 445.450000000067, + 445.500000000067, + 445.55000000006703, + 445.60000000006704, + 445.65000000006705, + 445.70000000006706, + 445.7500000000671, + 445.8000000000671, + 445.8500000000671, + 445.9000000000671, + 445.9500000000671, + 446.00000000006713, + 446.05000000006714, + 446.10000000006715, + 446.15000000006717, + 446.2000000000672, + 446.2500000000672, + 446.3000000000672, + 446.3500000000672, + 446.4000000000672, + 446.45000000006723, + 446.50000000006725, + 446.55000000006726, + 446.60000000006727, + 446.6500000000673, + 446.7000000000673, + 446.7500000000673, + 446.8000000000673, + 446.8500000000673, + 446.90000000006734, + 446.95000000006735, + 447.00000000006736, + 447.05000000006737, + 447.1000000000674, + 447.1500000000674, + 447.2000000000674, + 447.2500000000674, + 447.3000000000674, + 447.35000000006744, + 447.40000000006745, + 447.45000000006746, + 447.5000000000675, + 447.5500000000675, + 447.6000000000675, + 447.6500000000675, + 447.7000000000675, + 447.75000000006753, + 447.80000000006754, + 447.85000000006755, + 447.90000000006756, + 447.9500000000676, + 448.0000000000676, + 448.0500000000676, + 448.1000000000676, + 448.1500000000676, + 448.20000000006763, + 448.25000000006764, + 448.30000000006766, + 448.35000000006767, + 448.4000000000677, + 448.4500000000677, + 448.5000000000677, + 448.5500000000677, + 448.6000000000677, + 448.65000000006773, + 448.70000000006775, + 448.75000000006776, + 448.80000000006777, + 448.8500000000678, + 448.9000000000678, + 448.9500000000678, + 449.0000000000678, + 449.0500000000678, + 449.10000000006784, + 449.15000000006785, + 449.20000000006786, + 449.25000000006787, + 449.3000000000679, + 449.3500000000679, + 449.4000000000679, + 449.4500000000679, + 449.5000000000679, + 449.55000000006794, + 449.60000000006795, + 449.65000000006796, + 449.700000000068, + 449.750000000068, + 449.800000000068, + 449.850000000068, + 449.900000000068, + 449.95000000006803 + ] + } +} diff --git a/tests/backend/netpyne_model_importer_test.py b/tests/backend/netpyne_model_importer_test.py new file mode 100644 index 00000000..1b3332f2 --- /dev/null +++ b/tests/backend/netpyne_model_importer_test.py @@ -0,0 +1,87 @@ +import unittest +import os +import sys +import logging +import json, urllib.request + +import netpyne + +from netpyne import specs, sim +from netpyne_ui.netpyne_model_interpreter import NetPyNEModelInterpreter +import neuron +import subprocess + +from netpyne_ui.netpyne_geppetto import NETPYNE_WORKDIR_PATH +from netpyne_ui.netpyne_geppetto import NetPyNEGeppetto + +import sentry_sdk +sentry_sdk.init() + +netpyne.__gui__ = False +sys.path.insert(0, NETPYNE_WORKDIR_PATH) + +import sentry_sdk +sentry_sdk.init() + +class TestNetPyNEModelInterpreter(unittest.TestCase): + + @classmethod + def setUpClass(cls): + HERE = os.path.dirname(os.path.realpath(__file__)) + ROOT = os.path.dirname(HERE) + cls.path = NETPYNE_WORKDIR_PATH + modelpath = os.path.join(NETPYNE_WORKDIR_PATH, 'mod') + subprocess.call(["rm", "-r", os.path.join(modelpath, "x86_64")]) + owd = os.getcwd() + os.chdir(modelpath) + p = subprocess.check_output(["nrnivmodl"]) + os.chdir(owd) + try: + neuron.load_mechanisms(modelpath) + except: + logging.error("Error loading mechanisms", exc_info=True) + + # @unittest.skip("Neuroml model import issue") + def test_netpyne_exported_model_1(self): + print("------------------------------------") + print("Netpyne exported model sim run") + print("------------------------------------") + + params = {} + + HERE = os.path.dirname(os.path.realpath(__file__)) + ROOT = os.path.dirname(HERE) + + params["areModFieldsRequired"] = False + params["compileMod"] = False + params["exploreOnlyDirs"] = False + params["explorerDialogOpen"] = False + params["explorerParameter"] = "" + params["freezeInstance"] = True + params["freezeSimulation"] = True + params["jsonModelFolder"] = ROOT + "/backend/models/hhcells_model.json" + params["jsonPath"] = "" + params["loadNet"] = True + params["loadNetParams"] = True + params["loadSimCfg"] = True + params["loadSimData"] = True + params["modFolder"] = "" + params["modPath"] = "" + params["tab"] = "simulate" + + print(params['jsonModelFolder']) + + netpyne = NetPyNEGeppetto() + + netpyne.loadModel(params) + netpyne.simulate_single_model() + + #return False + + +if __name__ == '__main__': + try: + unittest.main() + except SystemExit as inst: + if inst.args[0]: # raised by sys.exit(True) when tests failed + raise diff --git a/tests/backend/netpyne_model_interpreter_test.py b/tests/backend/netpyne_model_interpreter_test.py index af37a0fd..0bcef888 100644 --- a/tests/backend/netpyne_model_interpreter_test.py +++ b/tests/backend/netpyne_model_interpreter_test.py @@ -15,6 +15,9 @@ netpyne.__gui__ = False sys.path.insert(0, NETPYNE_WORKDIR_PATH) +import sentry_sdk +sentry_sdk.init() + class TestNetPyNEModelInterpreter(unittest.TestCase): @@ -77,7 +80,7 @@ def test_getGeppettoModelSimpleNetwork(self): self.getGeppettoModel(netParams, simConfig) - @unittest.skip("Neuron restart kernel issue") + # @unittest.skip("Neuron restart kernel issue") def test_tut1(self): print("------------------------------------") print("Tutorial 1 Instantiation:") @@ -85,7 +88,7 @@ def test_tut1(self): from gui_tut1 import netParams, simConfig self.getGeppettoModel(netParams, simConfig) - @unittest.skip("Neuron restart kernel issue") + # @unittest.skip("Neuron restart kernel issue") def test_tut2(self): print("------------------------------------") print("Tutorial 2 Instantiation:") @@ -93,7 +96,7 @@ def test_tut2(self): from gui_tut2 import netParams, simConfig self.getGeppettoModel(netParams, simConfig) - @unittest.skip("Neuron restart kernel issue") + # @unittest.skip("Neuron restart kernel issue") def test_tut3(self): print("------------------------------------") print("Tutorial 3 Instantiation:") @@ -101,7 +104,7 @@ def test_tut3(self): from gui_tut3 import netParams, simConfig self.getGeppettoModel(netParams, simConfig) - @unittest.skip("Neuron restart kernel issue") + # @unittest.skip("Neuron restart kernel issue") def test_tut4(self): print("------------------------------------") print("Tutorial 3 ip3high Instantiation:") @@ -110,7 +113,7 @@ def test_tut4(self): from gui_tut3_ip3high import netParams, simConfig self.getGeppettoModel(netParams, simConfig) - @unittest.skip("Neuron restart kernel issue") + # @unittest.skip("Neuron restart kernel issue") def test_tut5(self): print("------------------------------------") print("Tutorial 3 norxd Instantiation:") @@ -118,7 +121,7 @@ def test_tut5(self): from gui_tut3_norxd import netParams, simConfig self.getGeppettoModel(netParams, simConfig) - @unittest.skip("Neuron restart kernel issue") + # @unittest.skip("Neuron restart kernel issue") def test_tut6(self): print("------------------------------------") print("Tutorial 3 osc Instantiation:") diff --git a/tests/backend/utils_test.py b/tests/backend/utils_test.py index dde4b62b..8f49a740 100644 --- a/tests/backend/utils_test.py +++ b/tests/backend/utils_test.py @@ -4,5 +4,8 @@ from netpyne_ui import mod_utils HERE = os.path.dirname(os.path.abspath(__file__)) +import sentry_sdk +sentry_sdk.init() + def test_compile_mod(): - mod_utils.compileModMechFiles(True, NETPYNE_WORKDIR_PATH) + mod_utils.loadModMechFiles(True, NETPYNE_WORKDIR_PATH) diff --git a/tests/frontend/e2e/.eslintrc.js b/tests/frontend/e2e/.eslintrc.js index 7e6f09b8..d804684b 100644 --- a/tests/frontend/e2e/.eslintrc.js +++ b/tests/frontend/e2e/.eslintrc.js @@ -1,8 +1,5 @@ module.exports = { - extends: [ - "./node_modules/@geppettoengine/geppetto-client/.eslintrc.js", - "plugin:jest/recommended" - ], + extends: ["plugin:jest/recommended"], rules: { 'multiline-comment-style': 0, }, @@ -17,6 +14,6 @@ module.exports = { pvdr: true, net1: true, CanvasContainer: true, - patchRequire: true + patchRequire: true, } -}; \ No newline at end of file +}; diff --git a/tests/frontend/e2e/jest-puppeteer.config.js b/tests/frontend/e2e/jest-puppeteer.config.js deleted file mode 100644 index b018dba8..00000000 --- a/tests/frontend/e2e/jest-puppeteer.config.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = { - launch: { - headless: true, - args: ['--no-sandbox', '--disable-setuid-sandbox'], - defaultViewport: { - width: 1300, - height: 1024 - }, - timeout: 120000 - }, -} \ No newline at end of file diff --git a/tests/frontend/e2e/jest.config.js b/tests/frontend/e2e/jest.config.js index 89e7ae66..3c4fc3e9 100644 --- a/tests/frontend/e2e/jest.config.js +++ b/tests/frontend/e2e/jest.config.js @@ -1,6 +1,6 @@ module.exports = { verbose: true, - preset: "jest-puppeteer", + // preset: "jest-puppeteer", testRegex : "(tests/Test.*|(\\.|/)(test|spec))\\.[jt]sx?$", setupFilesAfterEnv: ['./tests/setupTests.js'], }; \ No newline at end of file diff --git a/tests/frontend/e2e/package-lock.json b/tests/frontend/e2e/package-lock.json index 9783eaaa..1a5322d7 100644 --- a/tests/frontend/e2e/package-lock.json +++ b/tests/frontend/e2e/package-lock.json @@ -1,28 +1,60 @@ { "name": "netpyne-ui.test.e2e", "version": "0.1.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" + "packages": { + "": { + "name": "netpyne-ui.test.e2e", + "version": "0.1.0", + "license": "unlicensed", + "dependencies": { + "jest": "^27.5.1", + "jest-image-snapshot": "^4.5.1", + "jest-puppeteer": "^6.1.0", + "puppeteer": "^13.5.1" + }, + "devDependencies": { + "@babel/core": "^7.4.5", + "@babel/plugin-proposal-class-properties": "^7.5.5", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", + "@babel/plugin-transform-runtime": "^7.4.5", + "@babel/preset-env": "^7.4.5", + "@babel/preset-react": "^7.0.0", + "@babel/preset-stage-2": "^7.0.0", + "@babel/runtime": "^7.4.5", + "babel-eslint": "^10.0.1", + "babel-jest": "^24.9.0", + "babel-loader": "^8.0.6", + "babel-plugin-transform-decorators-legacy": "^1.3.5", + "babel-plugin-transform-object-assign": "^6.8.0", + "babel-plugin-transform-runtime": "^6.15.0", + "eslint": "^6.0.1", + "eslint-plugin-jest": "^22.21.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/compat-data": { + "node_modules/@babel/compat-data": { "version": "7.12.7", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz", "integrity": "sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw==", "dev": true }, - "@babel/core": { + "node_modules/@babel/core": { "version": "7.12.9", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "requires": { + "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/generator": "^7.12.5", "@babel/helper-module-transforms": "^7.12.1", @@ -40,187 +72,213 @@ "semver": "^5.4.1", "source-map": "^0.5.0" }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@babel/generator": { + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/@babel/core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/generator": { "version": "7.12.5", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", - "requires": { + "dependencies": { "@babel/types": "^7.12.5", "jsesc": "^2.5.1", "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } } }, - "@babel/helper-annotate-as-pure": { + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.10.4" } }, - "@babel/helper-builder-binary-assignment-operator-visitor": { + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-explode-assignable-expression": "^7.10.4", "@babel/types": "^7.10.4" } }, - "@babel/helper-builder-react-jsx": { + "node_modules/@babel/helper-builder-react-jsx": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz", "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/types": "^7.10.4" } }, - "@babel/helper-builder-react-jsx-experimental": { + "node_modules/@babel/helper-builder-react-jsx-experimental": { "version": "7.12.4", "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.4.tgz", "integrity": "sha512-AjEa0jrQqNk7eDQOo0pTfUOwQBMF+xVqrausQwT9/rTKy0g04ggFNaJpaE09IQMn9yExluigWMJcj0WC7bq+Og==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-module-imports": "^7.12.1", "@babel/types": "^7.12.1" } }, - "@babel/helper-compilation-targets": { + "node_modules/@babel/helper-compilation-targets": { "version": "7.12.5", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz", "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==", "dev": true, - "requires": { + "dependencies": { "@babel/compat-data": "^7.12.5", "@babel/helper-validator-option": "^7.12.1", "browserslist": "^4.14.5", "semver": "^5.5.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-create-class-features-plugin": { + "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-function-name": "^7.10.4", "@babel/helper-member-expression-to-functions": "^7.12.1", "@babel/helper-optimise-call-expression": "^7.10.4", "@babel/helper-replace-supers": "^7.12.1", "@babel/helper-split-export-declaration": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-create-regexp-features-plugin": { + "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.12.7", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz", "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.10.4", "regexpu-core": "^4.7.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-define-map": { + "node_modules/@babel/helper-define-map": { "version": "7.10.5", "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-function-name": "^7.10.4", "@babel/types": "^7.10.5", "lodash": "^4.17.19" } }, - "@babel/helper-explode-assignable-expression": { + "node_modules/@babel/helper-explode-assignable-expression": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.12.1" } }, - "@babel/helper-function-name": { + "node_modules/@babel/helper-function-name": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { + "dependencies": { "@babel/helper-get-function-arity": "^7.10.4", "@babel/template": "^7.10.4", "@babel/types": "^7.10.4" } }, - "@babel/helper-get-function-arity": { + "node_modules/@babel/helper-get-function-arity": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { + "dependencies": { "@babel/types": "^7.10.4" } }, - "@babel/helper-hoist-variables": { + "node_modules/@babel/helper-hoist-variables": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.10.4" } }, - "@babel/helper-member-expression-to-functions": { + "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.12.7", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", - "requires": { + "dependencies": { "@babel/types": "^7.12.7" } }, - "@babel/helper-module-imports": { + "node_modules/@babel/helper-module-imports": { "version": "7.12.5", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", - "requires": { + "dependencies": { "@babel/types": "^7.12.5" } }, - "@babel/helper-module-transforms": { + "node_modules/@babel/helper-module-transforms": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "requires": { + "dependencies": { "@babel/helper-module-imports": "^7.12.1", "@babel/helper-replace-supers": "^7.12.1", "@babel/helper-simple-access": "^7.12.1", @@ -232,407 +290,550 @@ "lodash": "^4.17.19" } }, - "@babel/helper-optimise-call-expression": { + "node_modules/@babel/helper-optimise-call-expression": { "version": "7.12.7", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz", "integrity": "sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw==", - "requires": { + "dependencies": { "@babel/types": "^7.12.7" } }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + "node_modules/@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-remap-async-to-generator": { + "node_modules/@babel/helper-remap-async-to-generator": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-wrap-function": "^7.10.4", "@babel/types": "^7.12.1" } }, - "@babel/helper-replace-supers": { + "node_modules/@babel/helper-replace-supers": { "version": "7.12.5", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==", - "requires": { + "dependencies": { "@babel/helper-member-expression-to-functions": "^7.12.1", "@babel/helper-optimise-call-expression": "^7.10.4", "@babel/traverse": "^7.12.5", "@babel/types": "^7.12.5" } }, - "@babel/helper-simple-access": { + "node_modules/@babel/helper-simple-access": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", - "requires": { + "dependencies": { "@babel/types": "^7.12.1" } }, - "@babel/helper-skip-transparent-expression-wrappers": { + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.12.1" } }, - "@babel/helper-split-export-declaration": { + "node_modules/@babel/helper-split-export-declaration": { "version": "7.11.0", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "requires": { + "dependencies": { "@babel/types": "^7.11.0" } }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-validator-option": { + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==", "dev": true }, - "@babel/helper-wrap-function": { + "node_modules/@babel/helper-wrap-function": { "version": "7.12.3", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-function-name": "^7.10.4", "@babel/template": "^7.10.4", "@babel/traverse": "^7.10.4", "@babel/types": "^7.10.4" } }, - "@babel/helpers": { + "node_modules/@babel/helpers": { "version": "7.12.5", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", - "requires": { + "dependencies": { "@babel/template": "^7.10.4", "@babel/traverse": "^7.12.5", "@babel/types": "^7.12.5" } }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/parser": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.7.tgz", - "integrity": "sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg==" + "node_modules/@babel/parser": { + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.13.tgz", + "integrity": "sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } }, - "@babel/plugin-proposal-async-generator-functions": { + "node_modules/@babel/plugin-proposal-async-generator-functions": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/helper-remap-async-to-generator": "^7.12.1", "@babel/plugin-syntax-async-generators": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-class-properties": { + "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-class-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-dynamic-import": { + "node_modules/@babel/plugin-proposal-dynamic-import": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-dynamic-import": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-export-namespace-from": { + "node_modules/@babel/plugin-proposal-export-namespace-from": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-json-strings": { + "node_modules/@babel/plugin-proposal-json-strings": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-logical-assignment-operators": { + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-nullish-coalescing-operator": { + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-numeric-separator": { + "node_modules/@babel/plugin-proposal-numeric-separator": { "version": "7.12.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz", "integrity": "sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-object-rest-spread": { + "node_modules/@babel/plugin-proposal-object-rest-spread": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-transform-parameters": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-optional-catch-binding": { + "node_modules/@babel/plugin-proposal-optional-catch-binding": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-optional-chaining": { + "node_modules/@babel/plugin-proposal-optional-chaining": { "version": "7.12.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz", "integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", "@babel/plugin-syntax-optional-chaining": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-private-methods": { + "node_modules/@babel/plugin-proposal-private-methods": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-class-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-unicode-property-regex": { + "node_modules/@babel/plugin-proposal-unicode-property-regex": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-async-generators": { + "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-class-properties": { + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", - "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-dynamic-import": { + "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-export-namespace-from": { + "node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-json-strings": { + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-jsx": { + "node_modules/@babel/plugin-syntax-jsx": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-logical-assignment-operators": { + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-nullish-coalescing-operator": { + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-numeric-separator": { + "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-object-rest-spread": { + "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-optional-catch-binding": { + "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-optional-chaining": { + "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-top-level-await": { + "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", - "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-arrow-functions": { + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-async-to-generator": { + "node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-imports": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4", "@babel/helper-remap-async-to-generator": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-block-scoped-functions": { + "node_modules/@babel/plugin-transform-block-scoped-functions": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-block-scoping": { + "node_modules/@babel/plugin-transform-block-scoping": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-classes": { + "node_modules/@babel/plugin-transform-classes": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-define-map": "^7.10.4", "@babel/helper-function-name": "^7.10.4", @@ -641,345 +842,450 @@ "@babel/helper-replace-supers": "^7.12.1", "@babel/helper-split-export-declaration": "^7.10.4", "globals": "^11.1.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-computed-properties": { + "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-destructuring": { + "node_modules/@babel/plugin-transform-destructuring": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-dotall-regex": { + "node_modules/@babel/plugin-transform-dotall-regex": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-duplicate-keys": { + "node_modules/@babel/plugin-transform-duplicate-keys": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-exponentiation-operator": { + "node_modules/@babel/plugin-transform-exponentiation-operator": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-for-of": { + "node_modules/@babel/plugin-transform-for-of": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-function-name": { + "node_modules/@babel/plugin-transform-function-name": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-function-name": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-literals": { + "node_modules/@babel/plugin-transform-literals": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-member-expression-literals": { + "node_modules/@babel/plugin-transform-member-expression-literals": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-amd": { + "node_modules/@babel/plugin-transform-modules-amd": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-transforms": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4", "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-commonjs": { + "node_modules/@babel/plugin-transform-modules-commonjs": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-transforms": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4", "@babel/helper-simple-access": "^7.12.1", "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-systemjs": { + "node_modules/@babel/plugin-transform-modules-systemjs": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-hoist-variables": "^7.10.4", "@babel/helper-module-transforms": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4", "@babel/helper-validator-identifier": "^7.10.4", "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-umd": { + "node_modules/@babel/plugin-transform-modules-umd": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-transforms": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-named-capturing-groups-regex": { + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/plugin-transform-new-target": { + "node_modules/@babel/plugin-transform-new-target": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-object-super": { + "node_modules/@babel/plugin-transform-object-super": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/helper-replace-supers": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-parameters": { + "node_modules/@babel/plugin-transform-parameters": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-property-literals": { + "node_modules/@babel/plugin-transform-property-literals": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-react-display-name": { + "node_modules/@babel/plugin-transform-react-display-name": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz", "integrity": "sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-react-jsx": { + "node_modules/@babel/plugin-transform-react-jsx": { "version": "7.12.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.7.tgz", "integrity": "sha512-YFlTi6MEsclFAPIDNZYiCRbneg1MFGao9pPG9uD5htwE0vDbPaMUMeYd6itWjw7K4kro4UbdQf3ljmFl9y48dQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-builder-react-jsx": "^7.10.4", "@babel/helper-builder-react-jsx-experimental": "^7.12.4", "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-jsx": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-react-jsx-development": { + "node_modules/@babel/plugin-transform-react-jsx-development": { "version": "7.12.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.7.tgz", "integrity": "sha512-Rs3ETtMtR3VLXFeYRChle5SsP/P9Jp/6dsewBQfokDSzKJThlsuFcnzLTDRALiUmTC48ej19YD9uN1mupEeEDg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-builder-react-jsx-experimental": "^7.12.4", "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-jsx": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-react-jsx-self": { + "node_modules/@babel/plugin-transform-react-jsx-self": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz", "integrity": "sha512-FbpL0ieNWiiBB5tCldX17EtXgmzeEZjFrix72rQYeq9X6nUK38HCaxexzVQrZWXanxKJPKVVIU37gFjEQYkPkA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-react-jsx-source": { + "node_modules/@babel/plugin-transform-react-jsx-source": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz", "integrity": "sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-react-pure-annotations": { + "node_modules/@babel/plugin-transform-react-pure-annotations": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz", "integrity": "sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-regenerator": { + "node_modules/@babel/plugin-transform-regenerator": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", "dev": true, - "requires": { + "dependencies": { "regenerator-transform": "^0.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-reserved-words": { + "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-runtime": { + "node_modules/@babel/plugin-transform-runtime": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz", "integrity": "sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-imports": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4", "resolve": "^1.8.1", "semver": "^5.5.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-shorthand-properties": { + "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-spread": { + "node_modules/@babel/plugin-transform-spread": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-sticky-regex": { + "node_modules/@babel/plugin-transform-sticky-regex": { "version": "7.12.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz", "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-template-literals": { + "node_modules/@babel/plugin-transform-template-literals": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-typeof-symbol": { + "node_modules/@babel/plugin-transform-typeof-symbol": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz", "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-unicode-escapes": { + "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-unicode-regex": { + "node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/preset-env": { + "node_modules/@babel/preset-env": { "version": "7.12.7", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.7.tgz", "integrity": "sha512-OnNdfAr1FUQg7ksb7bmbKoby4qFOHw6DKWWUNB9KqnnCldxhxJlP+21dpyaWFmf2h0rTbOkXJtAGevY3XW1eew==", "dev": true, - "requires": { + "dependencies": { "@babel/compat-data": "^7.12.7", "@babel/helper-compilation-targets": "^7.12.5", "@babel/helper-module-imports": "^7.12.5", @@ -1046,27 +1352,33 @@ "@babel/types": "^7.12.7", "core-js-compat": "^3.7.0", "semver": "^5.5.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/preset-modules": { + "node_modules/@babel/preset-modules": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/preset-react": { + "node_modules/@babel/preset-react": { "version": "7.12.7", "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.7.tgz", "integrity": "sha512-wKeTdnGUP5AEYCYQIMeXMMwU7j+2opxrG0WzuZfxuuW9nhKvvALBjl67653CWamZJVefuJGI219G591RSldrqQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-transform-react-display-name": "^7.12.1", "@babel/plugin-transform-react-jsx": "^7.12.7", @@ -1074,38 +1386,41 @@ "@babel/plugin-transform-react-jsx-self": "^7.12.1", "@babel/plugin-transform-react-jsx-source": "^7.12.1", "@babel/plugin-transform-react-pure-annotations": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/preset-stage-2": { + "node_modules/@babel/preset-stage-2": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/preset-stage-2/-/preset-stage-2-7.8.3.tgz", "integrity": "sha512-dStnEQgejNYIHFNACdDCigK4BF7wgW6Zahv9Dc2un7rGjbeVtZhBfR3sy0I7ZJOhBexkFxVdMZ5hqmll7BFShw==", "dev": true }, - "@babel/runtime": { + "node_modules/@babel/runtime": { "version": "7.12.5", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", "dev": true, - "requires": { + "dependencies": { "regenerator-runtime": "^0.13.4" } }, - "@babel/template": { + "node_modules/@babel/template": { "version": "7.12.7", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", - "requires": { + "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/parser": "^7.12.7", "@babel/types": "^7.12.7" } }, - "@babel/traverse": { + "node_modules/@babel/traverse": { "version": "7.12.9", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.9.tgz", "integrity": "sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw==", - "requires": { + "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/generator": "^7.12.5", "@babel/helper-function-name": "^7.10.4", @@ -1115,2989 +1430,23872 @@ "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.19" - }, + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@babel/types": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.7.tgz", - "integrity": "sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/@babel/types": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", + "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "dependencies": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@cnakazawa/watch": { + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + }, + "node_modules/@cnakazawa/watch": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "requires": { + "dev": true, + "dependencies": { "exec-sh": "^0.3.2", "minimist": "^1.2.0" + }, + "bin": { + "watch": "cli.js" + }, + "engines": { + "node": ">=0.1.95" } }, - "@hapi/address": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", - "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" }, - "@hapi/bourne": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", - "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } }, - "@hapi/hoek": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", - "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==" + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } }, - "@hapi/joi": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", - "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", - "requires": { - "@hapi/address": "2.x.x", - "@hapi/bourne": "1.x.x", - "@hapi/hoek": "8.x.x", - "@hapi/topo": "3.x.x" + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" } }, - "@hapi/topo": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", - "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", - "requires": { - "@hapi/hoek": "^8.3.0" + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "@jest/console": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", - "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", - "requires": { - "@jest/source-map": "^24.9.0", - "chalk": "^2.0.1", - "slash": "^2.0.0" + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "@jest/core": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", - "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", - "requires": { - "@jest/console": "^24.7.1", - "@jest/reporters": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.9.0", - "jest-config": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-resolve-dependencies": "^24.9.0", - "jest-runner": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "jest-watcher": "^24.9.0", - "micromatch": "^3.1.10", - "p-each-series": "^1.0.0", - "realpath-native": "^1.1.0", - "rimraf": "^2.5.4", - "slash": "^2.0.0", - "strip-ansi": "^5.0.0" + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "@jest/environment": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", - "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", - "requires": { - "@jest/fake-timers": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0" + "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" } }, - "@jest/fake-timers": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", - "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", - "requires": { - "@jest/types": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0" + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "engines": { + "node": ">=8" } }, - "@jest/reporters": { + "node_modules/@jest/console": { "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", - "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", - "requires": { - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", + "dev": true, + "dependencies": { + "@jest/source-map": "^24.9.0", "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.2", - "istanbul-lib-coverage": "^2.0.2", - "istanbul-lib-instrument": "^3.0.1", - "istanbul-lib-report": "^2.0.4", - "istanbul-lib-source-maps": "^3.0.1", - "istanbul-reports": "^2.2.6", - "jest-haste-map": "^24.9.0", - "jest-resolve": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.6.0", - "node-notifier": "^5.4.2", - "slash": "^2.0.0", - "source-map": "^0.6.0", - "string-length": "^2.0.0" + "slash": "^2.0.0" + }, + "engines": { + "node": ">= 6" } }, - "@jest/source-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", - "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.1.15", - "source-map": "^0.6.0" + "node_modules/@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "@jest/test-result": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", - "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", - "requires": { - "@jest/console": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/istanbul-lib-coverage": "^2.0.0" + "node_modules/@jest/core/node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "@jest/test-sequencer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", - "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", - "requires": { - "@jest/test-result": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-runner": "^24.9.0", - "jest-runtime": "^24.9.0" + "node_modules/@jest/core/node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "@jest/transform": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", - "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", - "requires": { + "node_modules/@jest/core/node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dependencies": { "@babel/core": "^7.1.0", - "@jest/types": "^24.9.0", - "babel-plugin-istanbul": "^5.1.0", - "chalk": "^2.0.1", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.9.0", - "jest-regex-util": "^24.9.0", - "jest-util": "^24.9.0", - "micromatch": "^3.1.10", - "pirates": "^4.0.1", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", "source-map": "^0.6.1", - "write-file-atomic": "2.4.1" + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "requires": { + "node_modules/@jest/core/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "@types/babel__core": { - "version": "7.1.12", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz", - "integrity": "sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==", - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "node_modules/@jest/core/node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" } }, - "@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", - "requires": { - "@babel/types": "^7.0.0" - } + "node_modules/@jest/core/node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" }, - "@types/babel__template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", - "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "node_modules/@jest/core/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dependencies": { + "@types/yargs-parser": "*" } }, - "@types/babel__traverse": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.15.tgz", - "integrity": "sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A==", - "requires": { - "@babel/types": "^7.3.0" + "node_modules/@jest/core/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" } }, - "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "requires": { - "@types/istanbul-lib-coverage": "*" + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" + "node_modules/@jest/core/node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", - "dev": true - }, - "@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==" - }, - "@types/yargs": { - "version": "13.0.11", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.11.tgz", - "integrity": "sha512-NRqD6T4gktUrDi1o1wLH3EKC1o2caCr7/wR87ODcbVITQF106OM3sFN92ysZ++wqelOd1CTzatnOBRDYYG6wGQ==", - "requires": { - "@types/yargs-parser": "*" + "node_modules/@jest/core/node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" } }, - "@types/yargs-parser": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", - "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==" - }, - "@typescript-eslint/experimental-utils": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz", - "integrity": "sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "1.13.0", - "eslint-scope": "^4.0.0" + "node_modules/@jest/core/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" } + ], + "engines": { + "node": ">=8" } }, - "@typescript-eslint/typescript-estree": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz", - "integrity": "sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw==", - "dev": true, - "requires": { - "lodash.unescape": "4.0.1", - "semver": "5.5.0" - }, + "node_modules/@jest/core/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - } + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" + "node_modules/@jest/core/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } }, - "acorn-globals": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", - "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", - "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - }, + "node_modules/@jest/core/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dependencies": { - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" - } + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true - }, - "acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==" - }, - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "requires": { - "es6-promisify": "^5.0.0" + "node_modules/@jest/core/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "node_modules/@jest/core/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" } }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "node_modules/@jest/core/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } }, - "ansi-escapes": { + "node_modules/@jest/core/node_modules/istanbul-lib-coverage": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "engines": { + "node": ">=8" } }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "node_modules/@jest/core/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" } }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" + "node_modules/@jest/core/node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + "node_modules/@jest/core/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + "node_modules/@jest/core/node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=" + "node_modules/@jest/core/node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + "node_modules/@jest/core/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" + "node_modules/@jest/core/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "node_modules/@jest/core/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + "node_modules/@jest/core/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" + "node_modules/@jest/core/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } }, - "async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + "node_modules/@jest/core/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + "node_modules/@jest/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "node_modules/@jest/core/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + "node_modules/@jest/core/node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "node_modules/@jest/core/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "node_modules/@jest/core/node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" + "node_modules/@jest/core/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, - "babel-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", - "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", - "requires": { - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/babel__core": "^7.1.0", - "babel-plugin-istanbul": "^5.1.0", - "babel-preset-jest": "^24.9.0", - "chalk": "^2.4.2", - "slash": "^2.0.0" + "node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "babel-loader": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.1.tgz", - "integrity": "sha512-dMF8sb2KQ8kJl21GUjkW1HWmcsL39GOV5vnzjqrCzEPNY0S0UfMLnumidiwIajDSBmKhYf5iRW+HXaM4cvCKBw==", - "dev": true, - "requires": { - "find-cache-dir": "^2.1.0", - "loader-utils": "^1.4.0", - "make-dir": "^2.1.0", - "pify": "^4.0.1", - "schema-utils": "^2.6.5" + "node_modules/@jest/environment/node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/environment/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" + "node_modules/@jest/environment/node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" } }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" + "node_modules/@jest/environment/node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "node_modules/@jest/environment/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dependencies": { + "@types/yargs-parser": "*" } }, - "babel-plugin-istanbul": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", - "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "find-up": "^3.0.0", - "istanbul-lib-instrument": "^3.3.0", - "test-exclude": "^5.2.3" + "node_modules/@jest/environment/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "babel-plugin-jest-hoist": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", - "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", - "requires": { - "@types/babel__traverse": "^7.0.6" + "node_modules/@jest/environment/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" } }, - "babel-plugin-syntax-decorators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", - "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", - "dev": true + "node_modules/@jest/environment/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/environment/node_modules/ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } }, - "babel-plugin-transform-decorators-legacy": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.5.tgz", - "integrity": "sha512-jYHwjzRXRelYQ1uGm353zNzf3QmtdCfvJbuYTZ4gKveK7M9H1fs3a5AKdY1JUDl0z97E30ukORW1dzhWvsabtA==", - "dev": true, - "requires": { - "babel-plugin-syntax-decorators": "^6.1.18", - "babel-runtime": "^6.2.0", - "babel-template": "^6.3.0" + "node_modules/@jest/environment/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "babel-plugin-transform-object-assign": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz", - "integrity": "sha1-+Z0vZvGgsNSY40bFNZaEdAyqILo=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" + "node_modules/@jest/environment/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@jest/environment/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" } }, - "babel-plugin-transform-runtime": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", - "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" + "node_modules/@jest/environment/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "babel-preset-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", - "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", - "requires": { - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.9.0" + "node_modules/@jest/environment/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" } }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, + "node_modules/@jest/environment/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/@jest/environment/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - } + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" + "node_modules/@jest/environment/node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" + "node_modules/@jest/environment/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/environment/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dependencies": { - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - } + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" } }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" + "node_modules/@jest/environment/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment/node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dependencies": { + "escape-string-regexp": "^2.0.0" }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/environment/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true + "node_modules/@jest/environment/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "node_modules/@jest/fake-timers": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", + "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", + "dev": true, + "dependencies": { + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" + }, + "engines": { + "node": ">= 6" + } }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" + "node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" + "node_modules/@jest/globals/node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" } }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true + "node_modules/@jest/globals/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dependencies": { + "@types/yargs-parser": "*" + } }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" + "node_modules/@jest/globals/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node_modules/@jest/globals/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "node_modules/@jest/globals/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/globals/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@jest/globals/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/globals/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true } } }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + "node_modules/@jest/reporters/node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "requires": { - "resolve": "1.1.7" + "node_modules/@jest/reporters/node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" - } + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "browserslist": { - "version": "4.14.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.7.tgz", - "integrity": "sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001157", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.591", - "escalade": "^3.1.1", - "node-releases": "^1.1.66" + "node_modules/@jest/reporters/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "requires": { - "node-int64": "^0.4.0" + "node_modules/@jest/reporters/node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" } }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + "node_modules/@jest/reporters/node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "node_modules/@jest/reporters/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dependencies": { + "@types/yargs-parser": "*" + } }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "call-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", - "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.0" + "node_modules/@jest/reporters/node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "node_modules/@jest/reporters/node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "node_modules/@jest/reporters/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } }, - "caniuse-lite": { - "version": "1.0.30001161", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001161.tgz", - "integrity": "sha512-JharrCDxOqPLBULF9/SPa6yMcBRTjZARJ6sc3cuKrPfyIk64JN6kuMINWqA99Xc8uElMFcROliwtz0n9pYej+g==", - "dev": true + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } }, - "capture-exit": { + "node_modules/@jest/reporters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@jest/reporters/node_modules/escape-string-regexp": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "requires": { - "rsvp": "^4.8.4" + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" } }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "node_modules/@jest/reporters/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "node_modules/@jest/reporters/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "node_modules/@jest/reporters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } }, - "ci": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ci/-/ci-1.0.0.tgz", - "integrity": "sha1-S8xb8S2CBgDxKxy7sdjNOz8PaMw=", - "requires": { - "events": "*", - "gitwin": "*", - "msbuild": "*" + "node_modules/@jest/reporters/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" } }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "node_modules/@jest/reporters/node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "engines": { + "node": ">=8" + } }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" + "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" + "node_modules/@jest/reporters/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true + "node_modules/@jest/reporters/node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "node_modules/@jest/reporters/node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "clone-deep": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", - "integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=", - "requires": { - "for-own": "^0.1.3", - "is-plain-object": "^2.0.1", - "kind-of": "^3.0.2", - "lazy-cache": "^1.0.3", - "shallow-clone": "^0.1.2" - }, + "node_modules/@jest/reporters/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "node_modules/@jest/reporters/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" + "node_modules/@jest/reporters/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "node_modules/@jest/reporters/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } }, - "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", - "dev": true + "node_modules/@jest/reporters/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + "node_modules/@jest/reporters/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" + "node_modules/@jest/reporters/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" } }, - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" + "node_modules/@jest/reporters/node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + "node_modules/@jest/reporters/node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "node_modules/@jest/reporters/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "node_modules/@jest/reporters/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "requires": { - "safe-buffer": "~5.1.1" + "node_modules/@jest/source-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", + "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + }, + "engines": { + "node": ">= 6" } }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + "node_modules/@jest/test-result": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", + "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", + "dev": true, + "dependencies": { + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/istanbul-lib-coverage": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } }, - "core-js": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" + "node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } }, - "core-js-compat": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.7.0.tgz", - "integrity": "sha512-V8yBI3+ZLDVomoWICO6kq/CD28Y4r1M7CWeO4AGpMdMfseu8bkSubBmUPySMGKRTS+su4XQ07zUkAsiu9FCWTg==", - "dev": true, - "requires": { - "browserslist": "^4.14.6", - "semver": "7.0.0" + "node_modules/@jest/test-sequencer/node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-sequencer/node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "node_modules/@jest/test-sequencer/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "node_modules/@jest/test-sequencer/node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" } }, - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + "node_modules/@jest/test-sequencer/node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" }, - "cssstyle": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", - "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", - "requires": { - "cssom": "0.3.x" + "node_modules/@jest/test-sequencer/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dependencies": { + "@types/yargs-parser": "*" } }, - "cwd": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/cwd/-/cwd-0.10.0.tgz", - "integrity": "sha1-FyQAaUBXwioTsM8WFix+S3p/5Wc=", - "requires": { - "find-pkg": "^0.1.2", - "fs-exists-sync": "^0.1.0" + "node_modules/@jest/test-sequencer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" + "node_modules/@jest/test-sequencer/node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", - "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" + "node_modules/@jest/test-sequencer/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/test-sequencer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/test-sequencer/node_modules/ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" } + ], + "engines": { + "node": ">=8" } }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" + "node_modules/@jest/test-sequencer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "node_modules/@jest/test-sequencer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + "node_modules/@jest/test-sequencer/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + "node_modules/@jest/test-sequencer/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" + "node_modules/@jest/test-sequencer/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, + "node_modules/@jest/test-sequencer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/test-sequencer/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/@jest/test-sequencer/node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=" + "node_modules/@jest/test-sequencer/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } }, - "diff-sequences": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", - "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==" + "node_modules/@jest/test-sequencer/node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" + "node_modules/@jest/test-sequencer/node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "requires": { - "webidl-conversions": "^4.0.2" + "node_modules/@jest/test-sequencer/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "node_modules/@jest/test-sequencer/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "electron-to-chromium": { - "version": "1.3.607", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.607.tgz", - "integrity": "sha512-h2SYNaBnlplGS0YyXl8oJWokfcNxVjJANQfMCsQefG6OSuAuNIeW+A8yGT/ci+xRoBb3k2zq1FrOvkgoKBol8g==", - "dev": true + "node_modules/@jest/test-sequencer/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "node_modules/@jest/test-sequencer/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } }, - "emojis-list": { + "node_modules/@jest/test-sequencer/node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" } }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" + "node_modules/@jest/test-sequencer/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" } }, - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "node_modules/@jest/test-sequencer/node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" } }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "node_modules/@jest/test-sequencer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "requires": { - "es6-promise": "^4.0.3" + "node_modules/@jest/test-sequencer/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" + "node_modules/@jest/transform": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", + "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^24.9.0", + "babel-plugin-istanbul": "^5.1.0", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.15", + "jest-haste-map": "^24.9.0", + "jest-regex-util": "^24.9.0", + "jest-util": "^24.9.0", + "micromatch": "^3.1.10", + "pirates": "^4.0.1", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "2.4.1" + }, + "engines": { + "node": ">= 6" } }, - "eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "node_modules/@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.3", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "peer": true, "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, - "eslint-plugin-jest": { - "version": "22.21.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-22.21.0.tgz", - "integrity": "sha512-OaqnSS7uBgcGiqXUiEnjoqxPNKvR4JWG5mSRkzVoR6+vDwlqqp11beeql1hYs0HTbdhiwrxWLxbX0Vx7roG3Ew==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "^1.13.0" + "peer": true, + "engines": { + "node": ">=6.0.0" } }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "peer": true, + "engines": { + "node": ">=6.0.0" } }, - "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true, + "peer": true }, - "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" - }, + "peer": true, "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, + "node_modules/@sideway/address": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } + "@hapi/hoek": "^9.0.0" } }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } + "type-detect": "4.0.8" } }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "engines": { + "node": ">= 6" + } }, - "events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==" + "node_modules/@types/babel__core": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", + "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } }, - "exec-sh": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", - "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==" + "node_modules/@types/babel__generator": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", + "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "dependencies": { + "@babel/types": "^7.0.0" + } }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "node_modules/@types/babel__template": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", + "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" + "node_modules/@types/babel__traverse": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.15.tgz", + "integrity": "sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A==", + "dependencies": { + "@babel/types": "^7.3.0" + } }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, + "node_modules/@types/eslint": { + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", + "dev": true, + "peer": true, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } + "@types/estree": "*", + "@types/json-schema": "*" } }, - "expand-tilde": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", - "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", - "requires": { - "os-homedir": "^1.0.1" + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" } }, - "expect": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", - "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", - "requires": { - "@jest/types": "^24.9.0", - "ansi-styles": "^3.2.0", - "jest-get-type": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-regex-util": "^24.9.0" + "node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true, + "peer": true + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "dependencies": { + "@types/node": "*" } }, - "expect-puppeteer": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/expect-puppeteer/-/expect-puppeteer-4.4.0.tgz", - "integrity": "sha512-6Ey4Xy2xvmuQu7z7YQtMsaMV0EHJRpVxIDOd5GRrm04/I3nkTKIutELfECsLp6le+b3SSa3cXhPiw6PgqzxYWA==" + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, + "node_modules/@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" } }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.11.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", + "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" + }, + "node_modules/@types/prettier": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", + "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==" + }, + "node_modules/@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "13.0.11", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.11.tgz", + "integrity": "sha512-NRqD6T4gktUrDi1o1wLH3EKC1o2caCr7/wR87ODcbVITQF106OM3sFN92ysZ++wqelOd1CTzatnOBRDYYG6wGQ==", "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "dependencies": { + "@types/yargs-parser": "*" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, + "node_modules/@types/yargs-parser": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", + "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==" + }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "optional": true, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "@types/node": "*" } }, - "extract-zip": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", - "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", - "requires": { - "concat-stream": "^1.6.2", - "debug": "^2.6.9", - "mkdirp": "^0.5.4", - "yauzl": "^2.10.0" + "node_modules/@typescript-eslint/experimental-utils": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz", + "integrity": "sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "1.13.0", + "eslint-scope": "^4.0.0" + }, + "engines": { + "node": "^6.14.0 || ^8.10.0 || >=9.10.0" + }, + "peerDependencies": { + "eslint": "*" } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "node_modules/@typescript-eslint/typescript-estree": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz", + "integrity": "sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw==", + "dev": true, + "dependencies": { + "lodash.unescape": "4.0.1", + "semver": "5.5.0" + }, + "engines": { + "node": ">=6.14.0" + } }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true, + "bin": { + "semver": "bin/semver" + } }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "requires": { - "bser": "2.1.1" + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" } }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "requires": { - "pend": "~1.2.0" + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" } }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" } }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dev": true, - "requires": { - "flat-cache": "^2.0.1" + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" } }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "optional": true + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true, + "peer": true }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "peer": true, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" } }, - "find-file-up": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/find-file-up/-/find-file-up-0.1.3.tgz", - "integrity": "sha1-z2gJG8+fMApA2kEbN9pczlovvqA=", - "requires": { - "fs-exists-sync": "^0.1.0", - "resolve-dir": "^0.1.0" + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" } }, - "find-pkg": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/find-pkg/-/find-pkg-0.1.2.tgz", - "integrity": "sha1-G9wiwG42NlUy4qJIBGhUuXiNpVc=", - "requires": { - "find-file-up": "^0.1.2" - } + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "peer": true }, - "find-process": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/find-process/-/find-process-1.4.4.tgz", - "integrity": "sha512-rRSuT1LE4b+BFK588D2V8/VG9liW0Ark1XJgroxZXI0LtwmQJOb490DvDYvbm+Hek9ETFzTutGfJ90gumITPhQ==", - "requires": { - "chalk": "^4.0.0", - "commander": "^5.1.0", - "debug": "^4.1.1" + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "peer": true + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "bin": { + "acorn": "bin/acorn" }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" } }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", "dev": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - }, - "dependencies": { - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } + "peer": true, + "peerDependencies": { + "acorn": "^8" } }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "requires": { - "for-in": "^1.0.1" + "node_modules/acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" } }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "^0.2.2" + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "fs-exists-sync": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", - "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=" + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" } }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + "node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } }, - "get-intrinsic": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", - "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, - "get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=" + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "engines": { + "node": ">=0.10.0" } }, - "gitwin": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/gitwin/-/gitwin-0.2.0.tgz", - "integrity": "sha1-i4BgJITNWW9/C5e5h2UdluixxuM=", - "requires": { - "colors": "*", - "events": "*" + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true, - "requires": { - "is-glob": "^4.0.1" + "engines": { + "node": ">=4" } }, - "global-modules": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", - "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", - "requires": { - "global-prefix": "^0.1.4", - "is-windows": "^0.2.0" + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/axios": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", + "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", "dependencies": { - "is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=" - } + "follow-redirects": "^1.14.7" } }, - "global-prefix": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", - "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", - "requires": { - "homedir-polyfill": "^1.0.0", - "ini": "^1.3.4", - "is-windows": "^0.2.0", - "which": "^1.2.12" - }, + "node_modules/babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, "dependencies": { - "is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=" - } + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" } }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "node_modules/babel-code-frame/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "glur": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/glur/-/glur-1.1.2.tgz", - "integrity": "sha1-8g6jbbEDv8KSNDkh8fkeg8NGdok=" + "node_modules/babel-code-frame/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + "node_modules/babel-code-frame/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" + "node_modules/babel-code-frame/node_modules/js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "node_modules/babel-code-frame/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" + "node_modules/babel-code-frame/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "engines": { + "node": ">=0.8.0" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" + "node_modules/babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "eslint": ">= 4.12.1" } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "^2.0.0" + "node_modules/babel-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", + "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", + "dev": true, + "dependencies": { + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/babel__core": "^7.1.0", + "babel-plugin-istanbul": "^5.1.0", + "babel-preset-jest": "^24.9.0", + "chalk": "^2.4.2", + "slash": "^2.0.0" + }, + "engines": { + "node": ">= 6" }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-loader": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.1.tgz", + "integrity": "sha512-dMF8sb2KQ8kJl21GUjkW1HWmcsL39GOV5vnzjqrCzEPNY0S0UfMLnumidiwIajDSBmKhYf5iRW+HXaM4cvCKBw==", + "dev": true, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - } + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "make-dir": "^2.1.0", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "node_modules/babel-loader/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + "node_modules/babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" } }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, + "node_modules/babel-plugin-istanbul": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", + "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", + "dev": true, "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "^1.1.5" - } - } + "@babel/helper-plugin-utils": "^7.0.0", + "find-up": "^3.0.0", + "istanbul-lib-instrument": "^3.3.0", + "test-exclude": "^5.2.3" + }, + "engines": { + "node": ">=6" } }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "requires": { - "parse-passwd": "^1.0.0" + "node_modules/babel-plugin-jest-hoist": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", + "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", + "dev": true, + "dependencies": { + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": ">= 6" } }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" + "node_modules/babel-plugin-syntax-decorators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", + "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", + "dev": true }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "requires": { - "whatwg-encoding": "^1.0.1" + "node_modules/babel-plugin-transform-decorators-legacy": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.5.tgz", + "integrity": "sha512-jYHwjzRXRelYQ1uGm353zNzf3QmtdCfvJbuYTZ4gKveK7M9H1fs3a5AKdY1JUDl0z97E30ukORW1dzhWvsabtA==", + "dev": true, + "dependencies": { + "babel-plugin-syntax-decorators": "^6.1.18", + "babel-runtime": "^6.2.0", + "babel-template": "^6.3.0" } }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + "node_modules/babel-plugin-transform-object-assign": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz", + "integrity": "sha1-+Z0vZvGgsNSY40bFNZaEdAyqILo=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "node_modules/babel-plugin-transform-runtime": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", + "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" } }, - "https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", + "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", + "dev": true, "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "babel-plugin-jest-hoist": "^24.9.0" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" } }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "node_modules/babel-runtime/node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", "dev": true }, - "import-fresh": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", - "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", + "node_modules/babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" } }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" + "node_modules/babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "dependencies": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" + "node_modules/babel-traverse/node_modules/globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "node_modules/babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, "dependencies": { - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "dev": true, - "requires": { - "type-fest": "^0.11.0" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true - } + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" } }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" + "node_modules/babel-types/node_modules/to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } + "node_modules/babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true, + "bin": { + "babylon": "bin/babylon.js" } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==" + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "requires": { - "ci-info": "^2.0.0" + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-core-module": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz", - "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==", - "requires": { - "has": "^1.0.3" + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" + "node_modules/base/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-date-object": { + "node_modules/base/node_modules/is-descriptor": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } + ] + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" } }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" + "node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, - "requires": { - "is-extglob": "^2.1.1" + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + }, + "node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/browserslist/node_modules/caniuse-lite": { + "version": "1.0.30001237", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001237.tgz", + "integrity": "sha512-pDHgRndit6p1NR2GhzMbQ6CkRrp4VKuSsqbcLeOQppYPKOYkKT/6ZvZDvKJUqcmtyWIAHuZq3SVS2vc1egCZzw==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/browserslist/node_modules/colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, + "node_modules/browserslist/node_modules/electron-to-chromium": { + "version": "1.3.752", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz", + "integrity": "sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==", + "dev": true + }, + "node_modules/browserslist/node_modules/node-releases": { + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", + "dev": true + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "engines": { + "node": "*" } }, - "is-regex": { + "node_modules/buffer-from": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "requires": { - "has-symbols": "^1.0.1" + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "node_modules/call-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", + "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "requires": { - "has-symbols": "^1.0.1" + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "is-windows": { + "node_modules/capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "dependencies": { + "rsvp": "^4.8.4" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/char-regex": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "engines": { + "node": ">=10" + } }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, - "isexe": { + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } }, - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==" + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone-deep": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", + "integrity": "sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==", "dependencies": { + "for-own": "^0.1.3", + "is-plain-object": "^2.0.1", + "kind-of": "^3.0.2", + "lazy-cache": "^1.0.3", + "shallow-clone": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clone-deep/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true, + "hasInstallScript": true + }, + "node_modules/core-js-compat": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.7.0.tgz", + "integrity": "sha512-V8yBI3+ZLDVomoWICO6kq/CD28Y4r1M7CWeO4AGpMdMfseu8bkSubBmUPySMGKRTS+su4XQ07zUkAsiu9FCWTg==", + "dev": true, + "dependencies": { + "browserslist": "^4.14.6", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dependencies": { + "node-fetch": "2.6.7" + } + }, + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + }, + "node_modules/cwd": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/cwd/-/cwd-0.10.0.tgz", + "integrity": "sha512-YGZxdTTL9lmLkCUTpg4j0zQ7IhRB5ZmqNBbGCl3Tg6MP/d5/6sY7L5mmTjzbc6JKgVZYiqTQTNhPFsbXNGlRaA==", + "dependencies": { + "find-pkg": "^0.1.2", + "fs-exists-sync": "^0.1.0" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/devtools-protocol": { + "version": "0.0.981744", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.981744.tgz", + "integrity": "sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==" + }, + "node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "dev": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "dependencies": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true, + "peer": true + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-jest": { + "version": "22.21.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-22.21.0.tgz", + "integrity": "sha512-OaqnSS7uBgcGiqXUiEnjoqxPNKvR4JWG5mSRkzVoR6+vDwlqqp11beeql1hYs0HTbdhiwrxWLxbX0Vx7roG3Ew==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "^1.13.0" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/eslint/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/espree/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/exec-sh": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", + "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", + "dev": true + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-tilde": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", + "integrity": "sha512-rtmc+cjLZqnu9dSYosX9EWmSJhTwpACgJQTfj4hgg2JjOD/6SIQalZrt4a3aQeh++oNxkazcaxrhPUj6+g5G/Q==", + "dependencies": { + "os-homedir": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/expect-puppeteer": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/expect-puppeteer/-/expect-puppeteer-6.1.1.tgz", + "integrity": "sha512-cnQF96qdoEcOD63j5NQMc0RtW9WRMW/WHKXEKsuDQ2tszhVH3qC7zkXXS4D0LTt9qCB3DEExioqylsQXvqPrUw==" + }, + "node_modules/expect/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/expect/node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/expect/node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "node_modules/expect/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/expect/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/expect/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/expect/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/expect/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/expect/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/expect/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/expect/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/expect/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/expect/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/expect/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/expect/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/expect/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/expect/node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/expect/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/expect/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/extract-zip/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "dependencies": { + "flat-cache": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-file-up": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/find-file-up/-/find-file-up-0.1.3.tgz", + "integrity": "sha512-mBxmNbVyjg1LQIIpgO8hN+ybWBgDQK8qjht+EbrTCGmmPV/sc7RF1i9stPTD6bpvXZywBdrwRYxhSdJv867L6A==", + "dependencies": { + "fs-exists-sync": "^0.1.0", + "resolve-dir": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/find-pkg": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/find-pkg/-/find-pkg-0.1.2.tgz", + "integrity": "sha512-0rnQWcFwZr7eO0513HahrWafsc3CTFioEB7DRiEYCUM/70QXSY8f3mCST17HXLcPvEhzH/Ty/Bxd72ZZsr/yvw==", + "dependencies": { + "find-file-up": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/find-process": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/find-process/-/find-process-1.4.7.tgz", + "integrity": "sha512-/U4CYp1214Xrp3u3Fqr9yNynUrr5Le4y0SsJh2lMDDSbpwYSz3M2SMWQC+wqcx79cN8PQtHQIL8KnuY9M66fdg==", + "dependencies": { + "chalk": "^4.0.0", + "commander": "^5.1.0", + "debug": "^4.1.1" + }, + "bin": { + "find-process": "bin/find-process.js" + } + }, + "node_modules/find-process/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/find-process/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/find-process/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/find-process/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/find-process/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/find-process/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/find-process/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/find-process/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "dependencies": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==", + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/fs-exists-sync": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", + "integrity": "sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", + "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "peer": true + }, + "node_modules/global-modules": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", + "integrity": "sha512-JeXuCbvYzYXcwE6acL9V2bAOeSIGl4dD+iwLY9iUx2VBJJ80R18HCn+JCwHM9Oegdfya3lEkGCdaRkSyc10hDA==", + "dependencies": { + "global-prefix": "^0.1.4", + "is-windows": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-modules/node_modules/is-windows": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", + "integrity": "sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", + "integrity": "sha512-gOPiyxcD9dJGCEArAhF4Hd0BAqvAe/JzERP7tYumE4yIkmIedPUVXcJFWbV3/p/ovIIvKjkrTk+f1UVkq7vvbw==", + "dependencies": { + "homedir-polyfill": "^1.0.0", + "ini": "^1.3.4", + "is-windows": "^0.2.0", + "which": "^1.2.12" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix/node_modules/is-windows": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", + "integrity": "sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/glur": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/glur/-/glur-1.1.2.tgz", + "integrity": "sha1-8g6jbbEDv8KSNDkh8fkeg8NGdok=" + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", + "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/inquirer/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, + "node_modules/is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "dev": true, + "dependencies": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "dependencies": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/jest-changed-files/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-changed-files/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-changed-files/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-changed-files/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-changed-files/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/jest-changed-files/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/jest-changed-files/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-changed-files/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-changed-files/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/jest-circus/node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "node_modules/jest-circus/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-circus/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-circus/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jest-circus/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/jest-circus/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-circus/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-cli/node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-cli/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-cli/node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/jest-cli/node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "node_modules/jest-cli/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-cli/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jest-cli/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-cli/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-cli/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/jest-cli/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config/node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/jest-config/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/jest-config/node_modules/babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/jest-config/node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config/node_modules/babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/jest-config/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-config/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/jest-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jest-config/node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-config/node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-config/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/jest-config/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-config/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-config/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/jest-config/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/jest-config/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/jest-dev-server": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jest-dev-server/-/jest-dev-server-6.2.0.tgz", + "integrity": "sha512-ZWh8CuvxwjhYfvw4tGeftziqIvw/26R6AG3OTgNTQeXul8aZz48RQjDpnlDwnWX53jxJJl9fcigqIdSU5lYZuw==", + "dependencies": { + "chalk": "^4.1.2", + "cwd": "^0.10.0", + "find-process": "^1.4.7", + "prompts": "^2.4.2", + "spawnd": "^6.2.0", + "tree-kill": "^1.2.2", + "wait-on": "^6.0.1" + } + }, + "node_modules/jest-dev-server/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-dev-server/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-dev-server/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-dev-server/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-dev-server/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-dev-server/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/jest-each/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-each/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-environment-jsdom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-environment-jsdom/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-environment-jsdom/node_modules/ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-environment-jsdom/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/jest-environment-jsdom/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-environment-jsdom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/jest-environment-node/node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "node_modules/jest-environment-node/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-environment-node/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-environment-node/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-node/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-environment-node/node_modules/ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-node/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-environment-node/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-node/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-node/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-node/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jest-environment-node/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/jest-environment-node/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-node/node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-environment-node/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-node/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/jest-environment-puppeteer": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jest-environment-puppeteer/-/jest-environment-puppeteer-6.2.0.tgz", + "integrity": "sha512-a/oSu6dO9D+XoDDe3ZY/0Sk79Jl2FcJl7Q0D+3x22l1eWNOYe4ikXnPGhtmNZ3mJIpuAVIX6LytA8EraOk/aqQ==", + "dependencies": { + "chalk": "^4.1.2", + "cwd": "^0.10.0", + "jest-dev-server": "^6.2.0", + "jest-environment-node": "^27.5.1", + "merge-deep": "^3.0.3" + } + }, + "node_modules/jest-environment-puppeteer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-environment-puppeteer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-environment-puppeteer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-environment-puppeteer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-environment-puppeteer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-puppeteer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", + "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", + "dev": true, + "dependencies": { + "@jest/types": "^24.9.0", + "anymatch": "^2.0.0", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.1.15", + "invariant": "^2.2.4", + "jest-serializer": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.9.0", + "micromatch": "^3.1.10", + "sane": "^4.0.3", + "walker": "^1.0.7" + }, + "engines": { + "node": ">= 6" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/jest-image-snapshot": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/jest-image-snapshot/-/jest-image-snapshot-4.5.1.tgz", + "integrity": "sha512-0YkgupgkkCx0wIZkxvqs/oNiUT0X0d2WTpUhaAp+Dy6CpqBUZMRTIZo4KR1f+dqmx6WXrLCvecjnHLIsLkI+gQ==", + "dependencies": { + "chalk": "^1.1.3", + "get-stdin": "^5.0.1", + "glur": "^1.1.2", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "pixelmatch": "^5.1.0", + "pngjs": "^3.4.0", + "rimraf": "^2.6.2", + "ssim.js": "^3.1.1" + }, + "engines": { + "node": ">= 10.14.2" + }, + "peerDependencies": { + "jest": ">=20 <=27" + } + }, + "node_modules/jest-image-snapshot/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-image-snapshot/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-image-snapshot/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-image-snapshot/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-image-snapshot/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/jest-jasmine2/node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "node_modules/jest-jasmine2/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-jasmine2/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-jasmine2/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/jest-jasmine2/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-jasmine2/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", + "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^2.0.1", + "micromatch": "^3.1.10", + "slash": "^2.0.0", + "stack-utils": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-mock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", + "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", + "dev": true, + "dependencies": { + "@jest/types": "^24.9.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-puppeteer": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jest-puppeteer/-/jest-puppeteer-6.2.0.tgz", + "integrity": "sha512-4Ynkgcf9FkHlTNEpdsojGLb3KtsToWqjO6SCigxb9Qj3HzIqhzJzNbDJ/XhiciNDpqDe6KHW9sZ6fjHphNLr6g==", + "dependencies": { + "expect-puppeteer": "^6.1.1", + "jest-environment-puppeteer": "^6.2.0" + }, + "peerDependencies": { + "puppeteer": ">= 1.5.0" + } + }, + "node_modules/jest-regex-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", + "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-resolve-dependencies/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve/node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/jest-resolve/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/jest-resolve/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-resolve/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/jest-resolve/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jest-resolve/node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-resolve/node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve/node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-resolve/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/jest-resolve/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-resolve/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/jest-runner/node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "node_modules/jest-runner/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/jest-runner/node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-runner/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/jest-runner/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jest-runner/node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-runner/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-runner/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/jest-runner/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-runner/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/jest-runner/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-runner/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/jest-runner/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/jest-runtime/node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "node_modules/jest-runtime/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/jest-runtime/node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-runtime/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/jest-runtime/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/jest-runtime/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-runtime/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jest-runtime/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-runtime/node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-runtime/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-runtime/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/jest-runtime/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-runtime/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/jest-runtime/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-runtime/node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/jest-runtime/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/jest-runtime/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/jest-serializer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/jest-snapshot/node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "node_modules/jest-snapshot/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/jest-snapshot/node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-snapshot/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jest-snapshot/node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/jest-snapshot/node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-snapshot/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/jest-snapshot/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/jest-snapshot/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/jest-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", + "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", + "dev": true, + "dependencies": { + "@jest/console": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/source-map": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "callsites": "^3.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.15", + "is-ci": "^2.0.0", + "mkdirp": "^0.5.1", + "slash": "^2.0.0", + "source-map": "^0.6.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/jest-validate/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-validate/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/jest-watcher/node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "node_modules/jest-watcher/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-watcher/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jest-watcher/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/jest-watcher/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-watcher/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dev": true, + "dependencies": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/joi": { + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.7.0.tgz", + "integrity": "sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==", + "dependencies": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" + } + }, + "node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/loader-utils/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dependencies": { + "tmpl": "1.0.x" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge-deep": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.3.tgz", + "integrity": "sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==", + "dependencies": { + "arr-union": "^3.1.0", + "clone-deep": "^0.2.4", + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge-deep/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dependencies": { + "mime-db": "1.44.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==", + "dependencies": { + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-object/node_modules/for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "dev": true, + "optional": true + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "peer": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nwsapi": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", + "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==" + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pixelmatch": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-5.2.1.tgz", + "integrity": "sha512-WjcAdYSnKrrdDdqTcVEY7aB7UhhwjYQKYhHiBXdJef0MOaQeYpUdQ+iVyBLa5YBKS8MPVPPMX7rpOByISLpeEQ==", + "dependencies": { + "pngjs": "^4.0.1" + }, + "bin": { + "pixelmatch": "bin/pixelmatch" + } + }, + "node_modules/pixelmatch/node_modules/pngjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-4.0.1.tgz", + "integrity": "sha512-rf5+2/ioHeQxR6IxuYNYGFytUyG3lma/WW1nsmjeHlWwtb2aByla6dkVc8pmJ9nplzkTA0q2xx7mMWrOTqT4Gg==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/puppeteer": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-13.7.0.tgz", + "integrity": "sha512-U1uufzBjz3+PkpCxFrWzh4OrMIdIb2ztzCu0YEPfRHjHswcSwHZswnK+WdsOQJsRV8WeTg3jLhJR4D867+fjsA==", + "deprecated": "< 18.1.0 is no longer supported", + "hasInstallScript": true, + "dependencies": { + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.981744", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "pkg-dir": "4.2.0", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.5.0" + }, + "engines": { + "node": ">=10.18.1" + } + }, + "node_modules/puppeteer/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/puppeteer/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/puppeteer/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/puppeteer/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/puppeteer/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/puppeteer/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/puppeteer/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/puppeteer/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/puppeteer/node_modules/ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/realpath-native": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", + "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", + "dev": true, + "dependencies": { + "util.promisify": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true, + "engines": { + "node": ">=6.5.0" + } + }, + "node_modules/regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "node_modules/repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", + "integrity": "sha512-QxMPqI6le2u0dCLyiGzgy92kjkkL6zO0XyvHzjdTNH3zM6e5Hz3BwG6+aEyNgiQ5Xz6PwTwgQEj3U50dByPKIA==", + "dependencies": { + "expand-tilde": "^1.2.2", + "global-modules": "^0.2.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/resolve.exports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", + "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true, + "engines": { + "node": "6.* || >= 7.*" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", + "dev": true, + "dependencies": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "bin": { + "sane": "src/cli.js" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shallow-clone": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", + "integrity": "sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw==", + "dependencies": { + "is-extendable": "^0.1.1", + "kind-of": "^2.0.1", + "lazy-cache": "^0.2.3", + "mixin-object": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shallow-clone/node_modules/kind-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", + "integrity": "sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==", + "dependencies": { + "is-buffer": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shallow-clone/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "dev": true + }, + "node_modules/spawnd": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/spawnd/-/spawnd-6.2.0.tgz", + "integrity": "sha512-qX/I4lQy4KgVEcNle0kuc4FxFWHISzBhZW1YemPfwmrmQjyZmfTK/OhBKkhrD2ooAaFZEm1maEBLE6/6enwt+g==", + "dependencies": { + "exit": "^0.1.2", + "signal-exit": "^3.0.7", + "tree-kill": "^1.2.2" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", + "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", + "dev": true + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "node_modules/ssim.js": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/ssim.js/-/ssim.js-3.5.0.tgz", + "integrity": "sha512-Aj6Jl2z6oDmgYFFbQqK7fght19bXdOxY7Tj03nF+03M9gCBAjeIiO8/PlEGMfKDwYpw4q6iBqVq2YuREorGg/g==" + }, + "node_modules/stack-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.3.tgz", + "integrity": "sha512-WldO+YmqhEpjp23eHZRhOT1NQF51STsbxZ+/AdpFD+EhheFxAe5d0WoK4DQVJkSHacPrJJX3OqRAl9CgHf78pg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-length/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-length/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", + "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", + "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, + "node_modules/table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "dependencies": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", + "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "peer": true + }, + "node_modules/test-exclude": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "dev": true, + "dependencies": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/throat": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", + "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", + "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/wait-on": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", + "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", + "dependencies": { + "axios": "^0.25.0", + "joi": "^17.6.0", + "lodash": "^4.17.21", + "minimist": "^1.2.5", + "rxjs": "^7.5.4" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/wait-on/node_modules/rxjs": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/wait-on/node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + }, + "node_modules/walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dependencies": { + "makeerror": "1.0.x" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "peer": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/webpack": { + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", + "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/write-file-atomic": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", + "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz", + "integrity": "sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw==", + "dev": true + }, + "@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "@babel/generator": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", + "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", + "requires": { + "@babel/types": "^7.12.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", + "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-builder-react-jsx": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz", + "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-builder-react-jsx-experimental": { + "version": "7.12.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.4.tgz", + "integrity": "sha512-AjEa0jrQqNk7eDQOo0pTfUOwQBMF+xVqrausQwT9/rTKy0g04ggFNaJpaE09IQMn9yExluigWMJcj0WC7bq+Og==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-module-imports": "^7.12.1", + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz", + "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.12.5", + "@babel/helper-validator-option": "^7.12.1", + "browserslist": "^4.14.5", + "semver": "^5.5.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", + "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.12.1", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.10.4" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz", + "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-define-map": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", + "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", + "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", + "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", + "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", + "requires": { + "@babel/types": "^7.12.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", + "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "requires": { + "@babel/types": "^7.12.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", + "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "requires": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/helper-validator-identifier": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", + "lodash": "^4.17.19" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz", + "integrity": "sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw==", + "requires": { + "@babel/types": "^7.12.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", + "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-wrap-function": "^7.10.4", + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-replace-supers": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", + "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.12.1", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.12.5", + "@babel/types": "^7.12.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "requires": { + "@babel/types": "^7.11.0" + } + }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + }, + "@babel/helper-validator-option": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", + "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", + "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helpers": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", + "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", + "requires": { + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.5", + "@babel/types": "^7.12.5" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.13.tgz", + "integrity": "sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw==" + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", + "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1", + "@babel/plugin-syntax-async-generators": "^7.8.0" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", + "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", + "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", + "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", + "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.0" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", + "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", + "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz", + "integrity": "sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", + "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz", + "integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", + "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", + "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", + "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", + "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", + "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", + "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", + "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", + "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", + "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-define-map": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.10.4", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", + "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", + "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", + "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", + "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", + "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", + "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", + "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", + "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", + "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", + "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", + "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-simple-access": "^7.12.1", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", + "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.10.4", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-identifier": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", + "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", + "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", + "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", + "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", + "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", + "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz", + "integrity": "sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.7.tgz", + "integrity": "sha512-YFlTi6MEsclFAPIDNZYiCRbneg1MFGao9pPG9uD5htwE0vDbPaMUMeYd6itWjw7K4kro4UbdQf3ljmFl9y48dQ==", + "dev": true, + "requires": { + "@babel/helper-builder-react-jsx": "^7.10.4", + "@babel/helper-builder-react-jsx-experimental": "^7.12.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.12.1" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.7.tgz", + "integrity": "sha512-Rs3ETtMtR3VLXFeYRChle5SsP/P9Jp/6dsewBQfokDSzKJThlsuFcnzLTDRALiUmTC48ej19YD9uN1mupEeEDg==", + "dev": true, + "requires": { + "@babel/helper-builder-react-jsx-experimental": "^7.12.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.12.1" + } + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz", + "integrity": "sha512-FbpL0ieNWiiBB5tCldX17EtXgmzeEZjFrix72rQYeq9X6nUK38HCaxexzVQrZWXanxKJPKVVIU37gFjEQYkPkA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz", + "integrity": "sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz", + "integrity": "sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", + "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", + "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz", + "integrity": "sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "resolve": "^1.8.1", + "semver": "^5.5.1" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", + "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", + "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz", + "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", + "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz", + "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", + "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", + "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/preset-env": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.7.tgz", + "integrity": "sha512-OnNdfAr1FUQg7ksb7bmbKoby4qFOHw6DKWWUNB9KqnnCldxhxJlP+21dpyaWFmf2h0rTbOkXJtAGevY3XW1eew==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.12.7", + "@babel/helper-compilation-targets": "^7.12.5", + "@babel/helper-module-imports": "^7.12.5", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-option": "^7.12.1", + "@babel/plugin-proposal-async-generator-functions": "^7.12.1", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-dynamic-import": "^7.12.1", + "@babel/plugin-proposal-export-namespace-from": "^7.12.1", + "@babel/plugin-proposal-json-strings": "^7.12.1", + "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-numeric-separator": "^7.12.7", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.12.1", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-async-to-generator": "^7.12.1", + "@babel/plugin-transform-block-scoped-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.1", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-computed-properties": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-dotall-regex": "^7.12.1", + "@babel/plugin-transform-duplicate-keys": "^7.12.1", + "@babel/plugin-transform-exponentiation-operator": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-function-name": "^7.12.1", + "@babel/plugin-transform-literals": "^7.12.1", + "@babel/plugin-transform-member-expression-literals": "^7.12.1", + "@babel/plugin-transform-modules-amd": "^7.12.1", + "@babel/plugin-transform-modules-commonjs": "^7.12.1", + "@babel/plugin-transform-modules-systemjs": "^7.12.1", + "@babel/plugin-transform-modules-umd": "^7.12.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", + "@babel/plugin-transform-new-target": "^7.12.1", + "@babel/plugin-transform-object-super": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-property-literals": "^7.12.1", + "@babel/plugin-transform-regenerator": "^7.12.1", + "@babel/plugin-transform-reserved-words": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/plugin-transform-sticky-regex": "^7.12.7", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/plugin-transform-typeof-symbol": "^7.12.1", + "@babel/plugin-transform-unicode-escapes": "^7.12.1", + "@babel/plugin-transform-unicode-regex": "^7.12.1", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.12.7", + "core-js-compat": "^3.7.0", + "semver": "^5.5.0" + } + }, + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-react": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.7.tgz", + "integrity": "sha512-wKeTdnGUP5AEYCYQIMeXMMwU7j+2opxrG0WzuZfxuuW9nhKvvALBjl67653CWamZJVefuJGI219G591RSldrqQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-transform-react-display-name": "^7.12.1", + "@babel/plugin-transform-react-jsx": "^7.12.7", + "@babel/plugin-transform-react-jsx-development": "^7.12.7", + "@babel/plugin-transform-react-jsx-self": "^7.12.1", + "@babel/plugin-transform-react-jsx-source": "^7.12.1", + "@babel/plugin-transform-react-pure-annotations": "^7.12.1" + } + }, + "@babel/preset-stage-2": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/preset-stage-2/-/preset-stage-2-7.8.3.tgz", + "integrity": "sha512-dStnEQgejNYIHFNACdDCigK4BF7wgW6Zahv9Dc2un7rGjbeVtZhBfR3sy0I7ZJOhBexkFxVdMZ5hqmll7BFShw==", + "dev": true + }, + "@babel/runtime": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", + "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", + "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7" + } + }, + "@babel/traverse": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.9.tgz", + "integrity": "sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "@babel/types": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", + "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + }, + "@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "dev": true, + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, + "@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" + }, + "@jest/console": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", + "dev": true, + "requires": { + "@jest/source-map": "^24.9.0", + "chalk": "^2.0.1", + "slash": "^2.0.0" + } + }, + "@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "requires": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + } + }, + "@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "requires": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + } + }, + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" + }, + "istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + } + }, + "jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "requires": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + } + }, + "jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==" + }, + "jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + } + }, + "jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + } + } + }, + "@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "requires": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "dependencies": { + "@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "requires": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*" + } + }, + "jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "@jest/fake-timers": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", + "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "requires": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "dependencies": { + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "dependencies": { + "@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + } + }, + "@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "requires": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + } + }, + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" + }, + "istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + } + }, + "jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "requires": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + } + }, + "jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==" + }, + "jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + } + }, + "jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + } + } + }, + "@jest/source-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", + "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", + "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", + "dev": true, + "requires": { + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/istanbul-lib-coverage": "^2.0.0" + } + }, + "@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "requires": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "dependencies": { + "@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + } + }, + "@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "requires": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "requires": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + } + }, + "jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==" + }, + "jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + } + }, + "jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "@jest/transform": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", + "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^24.9.0", + "babel-plugin-istanbul": "^5.1.0", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.15", + "jest-haste-map": "^24.9.0", + "jest-regex-util": "^24.9.0", + "jest-util": "^24.9.0", + "micromatch": "^3.1.10", + "pirates": "^4.0.1", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "2.4.1" + } + }, + "@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "peer": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "peer": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true, + "peer": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@sideway/address": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" + }, + "@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" + }, + "@types/babel__core": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", + "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", + "requires": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", + "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", + "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.15.tgz", + "integrity": "sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A==", + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/eslint": { + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", + "dev": true, + "peer": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "peer": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true, + "peer": true + }, + "@types/graceful-fs": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/node": { + "version": "18.11.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", + "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" + }, + "@types/prettier": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", + "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==" + }, + "@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "@types/yargs": { + "version": "13.0.11", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.11.tgz", + "integrity": "sha512-NRqD6T4gktUrDi1o1wLH3EKC1o2caCr7/wR87ODcbVITQF106OM3sFN92ysZ++wqelOd1CTzatnOBRDYYG6wGQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", + "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==" + }, + "@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz", + "integrity": "sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "1.13.0", + "eslint-scope": "^4.0.0" + }, + "dependencies": { + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + } + } + }, + "@typescript-eslint/typescript-estree": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz", + "integrity": "sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw==", + "dev": true, + "requires": { + "lodash.unescape": "4.0.1", + "semver": "5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + } + } + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "peer": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "peer": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true, + "peer": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "peer": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "peer": true + }, + "abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" + }, + "acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==" + }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + } + } + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "peer": true, + "requires": {} + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true, + "requires": {} + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "requires": {} + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + } + } + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "axios": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", + "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", + "requires": { + "follow-redirects": "^1.14.7" + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + } + }, + "babel-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", + "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", + "dev": true, + "requires": { + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/babel__core": "^7.1.0", + "babel-plugin-istanbul": "^5.1.0", + "babel-preset-jest": "^24.9.0", + "chalk": "^2.4.2", + "slash": "^2.0.0" + } + }, + "babel-loader": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.1.tgz", + "integrity": "sha512-dMF8sb2KQ8kJl21GUjkW1HWmcsL39GOV5vnzjqrCzEPNY0S0UfMLnumidiwIajDSBmKhYf5iRW+HXaM4cvCKBw==", + "dev": true, + "requires": { + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "make-dir": "^2.1.0", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-istanbul": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", + "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "find-up": "^3.0.0", + "istanbul-lib-instrument": "^3.3.0", + "test-exclude": "^5.2.3" + } + }, + "babel-plugin-jest-hoist": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", + "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", + "dev": true, + "requires": { + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-plugin-syntax-decorators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", + "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", + "dev": true + }, + "babel-plugin-transform-decorators-legacy": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.5.tgz", + "integrity": "sha512-jYHwjzRXRelYQ1uGm353zNzf3QmtdCfvJbuYTZ4gKveK7M9H1fs3a5AKdY1JUDl0z97E30ukORW1dzhWvsabtA==", + "dev": true, + "requires": { + "babel-plugin-syntax-decorators": "^6.1.18", + "babel-runtime": "^6.2.0", + "babel-template": "^6.3.0" + } + }, + "babel-plugin-transform-object-assign": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz", + "integrity": "sha1-+Z0vZvGgsNSY40bFNZaEdAyqILo=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-runtime": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", + "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", + "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", + "dev": true, + "requires": { + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "babel-plugin-jest-hoist": "^24.9.0" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + } + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + }, + "dependencies": { + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + } + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + }, + "dependencies": { + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + } + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + }, + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "dependencies": { + "caniuse-lite": { + "version": "1.0.30001237", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001237.tgz", + "integrity": "sha512-pDHgRndit6p1NR2GhzMbQ6CkRrp4VKuSsqbcLeOQppYPKOYkKT/6ZvZDvKJUqcmtyWIAHuZq3SVS2vc1egCZzw==", + "dev": true + }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.752", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz", + "integrity": "sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==", + "dev": true + }, + "node-releases": { + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", + "dev": true + } + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "call-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", + "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "requires": { + "rsvp": "^4.8.4" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "peer": true + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "clone-deep": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", + "integrity": "sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==", + "requires": { + "for-own": "^0.1.3", + "is-plain-object": "^2.0.1", + "kind-of": "^3.0.2", + "lazy-cache": "^1.0.3", + "shallow-clone": "^0.1.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" + }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", + "dev": true + }, + "core-js-compat": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.7.0.tgz", + "integrity": "sha512-V8yBI3+ZLDVomoWICO6kq/CD28Y4r1M7CWeO4AGpMdMfseu8bkSubBmUPySMGKRTS+su4XQ07zUkAsiu9FCWTg==", + "dev": true, + "requires": { + "browserslist": "^4.14.6", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "requires": { + "node-fetch": "2.6.7" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + } + } + }, + "cwd": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/cwd/-/cwd-0.10.0.tgz", + "integrity": "sha512-YGZxdTTL9lmLkCUTpg4j0zQ7IhRB5ZmqNBbGCl3Tg6MP/d5/6sY7L5mmTjzbc6JKgVZYiqTQTNhPFsbXNGlRaA==", + "requires": { + "find-pkg": "^0.1.2", + "fs-exists-sync": "^0.1.0" + } + }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, + "decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" + }, + "devtools-protocol": { + "version": "0.0.981744", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.981744.tgz", + "integrity": "sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==" + }, + "diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==" + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==" + } + } + }, + "emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true, + "peer": true + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + } + } + }, + "eslint": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "eslint-plugin-jest": { + "version": "22.21.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-22.21.0.tgz", + "integrity": "sha512-OaqnSS7uBgcGiqXUiEnjoqxPNKvR4JWG5mSRkzVoR6+vDwlqqp11beeql1hYs0HTbdhiwrxWLxbX0Vx7roG3Ew==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "^1.13.0" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "peer": true + }, + "exec-sh": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", + "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", + "dev": true + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-tilde": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", + "integrity": "sha512-rtmc+cjLZqnu9dSYosX9EWmSJhTwpACgJQTfj4hgg2JjOD/6SIQalZrt4a3aQeh++oNxkazcaxrhPUj6+g5G/Q==", + "requires": { + "os-homedir": "^1.0.1" + } + }, + "expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "requires": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "dependencies": { + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "expect-puppeteer": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/expect-puppeteer/-/expect-puppeteer-6.1.1.tgz", + "integrity": "sha512-cnQF96qdoEcOD63j5NQMc0RtW9WRMW/WHKXEKsuDQ2tszhVH3qC7zkXXS4D0LTt9qCB3DEExioqylsQXvqPrUw==" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "requires": { + "bser": "2.1.1" + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "requires": { + "pend": "~1.2.0" + } + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-file-up": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/find-file-up/-/find-file-up-0.1.3.tgz", + "integrity": "sha512-mBxmNbVyjg1LQIIpgO8hN+ybWBgDQK8qjht+EbrTCGmmPV/sc7RF1i9stPTD6bpvXZywBdrwRYxhSdJv867L6A==", + "requires": { + "fs-exists-sync": "^0.1.0", + "resolve-dir": "^0.1.0" + } + }, + "find-pkg": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/find-pkg/-/find-pkg-0.1.2.tgz", + "integrity": "sha512-0rnQWcFwZr7eO0513HahrWafsc3CTFioEB7DRiEYCUM/70QXSY8f3mCST17HXLcPvEhzH/Ty/Bxd72ZZsr/yvw==", + "requires": { + "find-file-up": "^0.1.2" + } + }, + "find-process": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/find-process/-/find-process-1.4.7.tgz", + "integrity": "sha512-/U4CYp1214Xrp3u3Fqr9yNynUrr5Le4y0SsJh2lMDDSbpwYSz3M2SMWQC+wqcx79cN8PQtHQIL8KnuY9M66fdg==", + "requires": { + "chalk": "^4.0.0", + "commander": "^5.1.0", + "debug": "^4.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==", + "requires": { + "for-in": "^1.0.1" + } + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "fs-exists-sync": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", + "integrity": "sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-intrinsic": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", + "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" + }, + "get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=" + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "peer": true + }, + "global-modules": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", + "integrity": "sha512-JeXuCbvYzYXcwE6acL9V2bAOeSIGl4dD+iwLY9iUx2VBJJ80R18HCn+JCwHM9Oegdfya3lEkGCdaRkSyc10hDA==", + "requires": { + "global-prefix": "^0.1.4", + "is-windows": "^0.2.0" + }, + "dependencies": { + "is-windows": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", + "integrity": "sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q==" + } + } + }, + "global-prefix": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", + "integrity": "sha512-gOPiyxcD9dJGCEArAhF4Hd0BAqvAe/JzERP7tYumE4yIkmIedPUVXcJFWbV3/p/ovIIvKjkrTk+f1UVkq7vvbw==", + "requires": { + "homedir-polyfill": "^1.0.0", + "ini": "^1.3.4", + "is-windows": "^0.2.0", + "which": "^1.2.12" + }, + "dependencies": { + "is-windows": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", + "integrity": "sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q==" + } + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "glur": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/glur/-/glur-1.1.2.tgz", + "integrity": "sha1-8g6jbbEDv8KSNDkh8fkeg8NGdok=" + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "requires": { + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", + "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "^4.0.0" + } + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "dev": true, + "requires": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "requires": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + } + }, + "jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "requires": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "dependencies": { + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "requires": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "dependencies": { + "@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + } + }, + "@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "requires": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "requires": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "dependencies": { + "@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + } + }, + "@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "requires": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "requires": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + } + }, + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "requires": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "requires": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" + }, + "istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + } + }, + "jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "requires": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + } + }, + "jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==" + }, + "jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + } + }, + "jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + } + } + }, + "jest-dev-server": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jest-dev-server/-/jest-dev-server-6.2.0.tgz", + "integrity": "sha512-ZWh8CuvxwjhYfvw4tGeftziqIvw/26R6AG3OTgNTQeXul8aZz48RQjDpnlDwnWX53jxJJl9fcigqIdSU5lYZuw==", + "requires": { + "chalk": "^4.1.2", + "cwd": "^0.10.0", + "find-process": "^1.4.7", + "prompts": "^2.4.2", + "spawnd": "^6.2.0", + "tree-kill": "^1.2.2", + "wait-on": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "dependencies": { + "@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "requires": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*" + } + }, + "jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "dependencies": { + "@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "requires": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*" + } + }, + "jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "jest-environment-puppeteer": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jest-environment-puppeteer/-/jest-environment-puppeteer-6.2.0.tgz", + "integrity": "sha512-a/oSu6dO9D+XoDDe3ZY/0Sk79Jl2FcJl7Q0D+3x22l1eWNOYe4ikXnPGhtmNZ3mJIpuAVIX6LytA8EraOk/aqQ==", + "requires": { + "chalk": "^4.1.2", + "cwd": "^0.10.0", + "jest-dev-server": "^6.2.0", + "jest-environment-node": "^27.5.1", + "merge-deep": "^3.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==" + }, + "jest-haste-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", + "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "anymatch": "^2.0.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.7", + "graceful-fs": "^4.1.15", + "invariant": "^2.2.4", + "jest-serializer": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.9.0", + "micromatch": "^3.1.10", + "sane": "^4.0.3", + "walker": "^1.0.7" + } + }, + "jest-image-snapshot": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/jest-image-snapshot/-/jest-image-snapshot-4.5.1.tgz", + "integrity": "sha512-0YkgupgkkCx0wIZkxvqs/oNiUT0X0d2WTpUhaAp+Dy6CpqBUZMRTIZo4KR1f+dqmx6WXrLCvecjnHLIsLkI+gQ==", + "requires": { + "chalk": "^1.1.3", + "get-stdin": "^5.0.1", + "glur": "^1.1.2", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "pixelmatch": "^5.1.0", + "pngjs": "^3.4.0", + "rimraf": "^2.6.2", + "ssim.js": "^3.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "requires": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "dependencies": { + "@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + } + }, + "@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "requires": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "requires": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-message-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", + "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^2.0.1", + "micromatch": "^3.1.10", + "slash": "^2.0.0", + "stack-utils": "^1.0.1" + } + }, + "jest-mock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", + "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0" + } + }, + "jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "requires": {} + }, + "jest-puppeteer": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jest-puppeteer/-/jest-puppeteer-6.2.0.tgz", + "integrity": "sha512-4Ynkgcf9FkHlTNEpdsojGLb3KtsToWqjO6SCigxb9Qj3HzIqhzJzNbDJ/XhiciNDpqDe6KHW9sZ6fjHphNLr6g==", + "requires": { + "expect-puppeteer": "^6.1.1", + "jest-environment-puppeteer": "^6.2.0" + } + }, + "jest-regex-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", + "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", + "dev": true + }, + "jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "dependencies": { + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "requires": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + } + }, + "jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==" + }, + "jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + } + }, + "jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "requires": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "dependencies": { + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "requires": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "dependencies": { + "@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + } + }, + "@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "requires": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + } + }, + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" + }, + "istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + } + }, + "jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "requires": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + } + }, + "jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==" + }, + "jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + } + }, + "jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", - "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" - }, - "dependencies": { + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "requires": { - "ms": "2.1.2" + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "istanbul-reports": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", - "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", - "requires": { - "html-escaper": "^2.0.0" - } - }, - "jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", - "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", - "requires": { - "import-local": "^2.0.0", - "jest-cli": "^24.9.0" - }, - "dependencies": { - "jest-cli": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", - "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "requires": { - "@jest/core": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "import-local": "^2.0.0", - "is-ci": "^2.0.0", - "jest-config": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "prompts": "^2.0.1", - "realpath-native": "^1.1.0", - "yargs": "^13.3.0" + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } } } }, - "jest-changed-files": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", - "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", - "requires": { - "@jest/types": "^24.9.0", - "execa": "^1.0.0", - "throat": "^4.0.0" - } - }, - "jest-config": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", - "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^24.9.0", - "@jest/types": "^24.9.0", - "babel-jest": "^24.9.0", - "chalk": "^2.0.1", - "glob": "^7.1.1", - "jest-environment-jsdom": "^24.9.0", - "jest-environment-node": "^24.9.0", - "jest-get-type": "^24.9.0", - "jest-jasmine2": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "micromatch": "^3.1.10", - "pretty-format": "^24.9.0", - "realpath-native": "^1.1.0" - } - }, - "jest-dev-server": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/jest-dev-server/-/jest-dev-server-4.4.0.tgz", - "integrity": "sha512-STEHJ3iPSC8HbrQ3TME0ozGX2KT28lbT4XopPxUm2WimsX3fcB3YOptRh12YphQisMhfqNSNTZUmWyT3HEXS2A==", - "requires": { - "chalk": "^3.0.0", - "cwd": "^0.10.0", - "find-process": "^1.4.3", - "prompts": "^2.3.0", - "spawnd": "^4.4.0", - "tree-kill": "^1.2.2", - "wait-on": "^3.3.0" + "jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" }, "dependencies": { + "@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + } + }, + "@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "requires": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "requires": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + } + }, + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -4106,15 +25304,49 @@ "color-convert": "^2.0.1" } }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, + "ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==" + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -4128,122 +25360,242 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" + }, + "istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "requires": { - "has-flag": "^4.0.0" + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" } - } - } - }, - "jest-diff": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", - "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", - "requires": { - "chalk": "^2.0.1", - "diff-sequences": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-docblock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", - "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", - "requires": { - "detect-newline": "^2.1.0" - } - }, - "jest-each": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", - "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", - "requires": { - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "jest-util": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-environment-jsdom": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", - "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", - "requires": { - "@jest/environment": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-util": "^24.9.0", - "jsdom": "^11.5.1" - } - }, - "jest-environment-node": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", - "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", - "requires": { - "@jest/environment": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-util": "^24.9.0" - } - }, - "jest-environment-puppeteer": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/jest-environment-puppeteer/-/jest-environment-puppeteer-4.4.0.tgz", - "integrity": "sha512-iV8S8+6qkdTM6OBR/M9gKywEk8GDSOe05hspCs5D8qKSwtmlUfdtHfB4cakdc68lC6YfK3AUsLirpfgodCHjzQ==", - "requires": { - "chalk": "^3.0.0", - "cwd": "^0.10.0", - "jest-dev-server": "^4.4.0", - "merge-deep": "^3.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + }, + "jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "requires": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + } + }, + "jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*" + } + }, + "jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==" + }, + "jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + } + }, + "jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "requires": { - "color-convert": "^2.0.1" + "shebang-regex": "^3.0.0" } }, - "chalk": { + "shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "requires": { - "color-name": "~1.1.4" + "escape-string-regexp": "^2.0.0" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { + "strip-bom": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" }, "supports-color": { "version": "7.2.0", @@ -4252,278 +25604,407 @@ "requires": { "has-flag": "^4.0.0" } - } - } - }, - "jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==" - }, - "jest-haste-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", - "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", - "requires": { - "@jest/types": "^24.9.0", - "anymatch": "^2.0.0", - "fb-watchman": "^2.0.0", - "fsevents": "^1.2.7", - "graceful-fs": "^4.1.15", - "invariant": "^2.2.4", - "jest-serializer": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.9.0", - "micromatch": "^3.1.10", - "sane": "^4.0.3", - "walker": "^1.0.7" - } - }, - "jest-image-snapshot": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/jest-image-snapshot/-/jest-image-snapshot-4.2.0.tgz", - "integrity": "sha512-6aAqv2wtfOgxiJeBayBCqHo1zX+A12SUNNzo7rIxiXh6W6xYVu8QyHWkada8HeRi+QUTHddp0O0Xa6kmQr+xbQ==", - "requires": { - "chalk": "^1.1.3", - "get-stdin": "^5.0.1", - "glur": "^1.1.2", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "pixelmatch": "^5.1.0", - "pngjs": "^3.4.0", - "rimraf": "^2.6.2", - "ssim.js": "^3.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "is-number": "^7.0.0" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "requires": { - "ansi-regex": "^2.0.0" + "isexe": "^2.0.0" } }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } } } }, - "jest-jasmine2": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", - "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "co": "^4.6.0", - "expect": "^24.9.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "pretty-format": "^24.9.0", - "throat": "^4.0.0" - } - }, - "jest-leak-detector": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", - "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", - "requires": { - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-matcher-utils": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", - "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", - "requires": { - "chalk": "^2.0.1", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-message-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", - "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^2.0.1", - "micromatch": "^3.1.10", - "slash": "^2.0.0", - "stack-utils": "^1.0.1" - } - }, - "jest-mock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", - "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", - "requires": { - "@jest/types": "^24.9.0" - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==" - }, - "jest-puppeteer": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/jest-puppeteer/-/jest-puppeteer-4.4.0.tgz", - "integrity": "sha512-ZaiCTlPZ07B9HW0erAWNX6cyzBqbXMM7d2ugai4epBDKpKvRDpItlRQC6XjERoJELKZsPziFGS0OhhUvTvQAXA==", - "requires": { - "expect-puppeteer": "^4.4.0", - "jest-environment-puppeteer": "^4.4.0" - } - }, - "jest-regex-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", - "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==" - }, - "jest-resolve": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", - "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", - "requires": { - "@jest/types": "^24.9.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - } - }, - "jest-resolve-dependencies": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", - "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", - "requires": { - "@jest/types": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-snapshot": "^24.9.0" - } - }, - "jest-runner": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", - "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.4.2", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-config": "^24.9.0", - "jest-docblock": "^24.3.0", - "jest-haste-map": "^24.9.0", - "jest-jasmine2": "^24.9.0", - "jest-leak-detector": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-resolve": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.6.0", - "source-map-support": "^0.5.6", - "throat": "^4.0.0" - } - }, - "jest-runtime": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", - "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.9.0", - "@jest/source-map": "^24.3.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/yargs": "^13.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.1.15", - "jest-config": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "strip-bom": "^3.0.0", - "yargs": "^13.3.0" - } - }, "jest-serializer": { "version": "24.9.0", "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", - "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==" + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", + "dev": true }, "jest-snapshot": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", - "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", - "requires": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "requires": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "expect": "^24.9.0", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-resolve": "^24.9.0", - "mkdirp": "^0.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", "natural-compare": "^1.4.0", - "pretty-format": "^24.9.0", - "semver": "^6.2.0" + "pretty-format": "^27.5.1", + "semver": "^7.3.2" }, "dependencies": { + "@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + } + }, + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" + }, + "istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "requires": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + } + }, + "jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==" + }, + "jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + } + }, + "jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } } } }, @@ -4531,6 +26012,7 @@ "version": "24.9.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", + "dev": true, "requires": { "@jest/console": "^24.9.0", "@jest/fake-timers": "^24.9.0", @@ -4547,36 +26029,302 @@ } }, "jest-validate": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", - "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", "requires": { - "@jest/types": "^24.9.0", - "camelcase": "^5.3.1", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", "leven": "^3.1.0", - "pretty-format": "^24.9.0" + "pretty-format": "^27.5.1" + }, + "dependencies": { + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, "jest-watcher": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", - "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", "requires": { - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/yargs": "^13.0.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "jest-util": "^24.9.0", - "string-length": "^2.0.0" + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "dependencies": { + "@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + } + }, + "@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "requires": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } } }, "jest-worker": { "version": "24.9.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dev": true, "requires": { "merge-stream": "^2.0.0", "supports-color": "^6.1.0" @@ -4586,12 +26334,25 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, "requires": { "has-flag": "^3.0.0" } } } }, + "joi": { + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.7.0.tgz", + "integrity": "sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==", + "requires": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -4601,47 +26362,42 @@ "version": "3.14.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, "jsdom": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", - "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", - "requires": { - "abab": "^2.0.0", - "acorn": "^5.5.3", - "acorn-globals": "^4.1.0", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": "^1.0.0", - "data-urls": "^1.0.0", - "domexception": "^1.0.1", - "escodegen": "^1.9.1", - "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.3.0", - "nwsapi": "^2.0.7", - "parse5": "4.0.0", - "pn": "^1.1.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.4", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^5.2.0", + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "requires": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", "xml-name-validator": "^3.0.0" } }, @@ -4653,52 +26409,36 @@ "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "requires": { - "minimist": "^1.2.5" - } + "dev": true }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true }, "kleur": { "version": "3.0.3", @@ -4708,12 +26448,7 @@ "lazy-cache": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" - }, - "left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==" + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==" }, "leven": { "version": "3.1.0", @@ -4729,10 +26464,16 @@ "type-check": "~0.3.2" } }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", @@ -4740,10 +26481,17 @@ "strip-bom": "^3.0.0" } }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "peer": true + }, "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", "dev": true, "requires": { "big.js": "^5.2.2", @@ -4752,9 +26500,9 @@ }, "dependencies": { "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "requires": { "minimist": "^1.2.0" @@ -4766,20 +26514,16 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.unescape": { "version": "4.0.1", @@ -4791,14 +26535,24 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, "requires": { "js-tokens": "^3.0.0 || ^4.0.0" } }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, "requires": { "pify": "^4.0.1", "semver": "^5.6.0" @@ -4807,7 +26561,8 @@ "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true } } }, @@ -4822,20 +26577,22 @@ "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, "requires": { "object-visit": "^1.0.0" } }, "merge-deep": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz", - "integrity": "sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.3.tgz", + "integrity": "sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==", "requires": { "arr-union": "^3.1.0", "clone-deep": "^0.2.4", @@ -4845,7 +26602,7 @@ "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "requires": { "is-buffer": "^1.1.5" } @@ -4861,6 +26618,7 @@ "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -4877,11 +26635,6 @@ "to-regex": "^3.0.2" } }, - "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" - }, "mime-db": { "version": "1.44.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", @@ -4898,26 +26651,26 @@ "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -4927,6 +26680,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -4936,7 +26690,7 @@ "mixin-object": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "integrity": "sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==", "requires": { "for-in": "^0.1.3", "is-extendable": "^0.1.1" @@ -4945,7 +26699,7 @@ "for-in": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=" + "integrity": "sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==" } } }, @@ -4957,20 +26711,16 @@ "minimist": "^1.2.5" } }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "msbuild": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/msbuild/-/msbuild-1.1.3.tgz", - "integrity": "sha512-oRQkgexmys69ox0gTRc4KdecFtzMBRNMwMyaJhwQggCnYQRjdecI1tyEdiI3KiDOBwtFVFcjpUCbYtiLQGsIHQ==", - "requires": { - "async": "*", - "colors": "*", - "events": "*" - } + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true }, "mute-stream": { "version": "0.0.8", @@ -4982,12 +26732,14 @@ "version": "2.14.2", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "dev": true, "optional": true }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -5007,43 +26759,58 @@ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "peer": true + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" - }, - "node-notifier": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", - "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", - "requires": { - "growly": "^1.3.0", - "is-wsl": "^1.1.0", - "semver": "^5.5.0", - "shellwords": "^0.1.1", - "which": "^1.3.0" - } - }, - "node-releases": { - "version": "1.1.67", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz", - "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==", - "dev": true - }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, "requires": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -5055,6 +26822,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, "requires": { "remove-trailing-separator": "^1.0.1" } @@ -5063,24 +26831,21 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, "requires": { "path-key": "^2.0.0" } }, "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", + "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==" }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, "requires": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -5091,6 +26856,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -5099,6 +26865,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -5108,17 +26875,20 @@ "object-inspect": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "dev": true }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, "requires": { "isobject": "^3.0.0" } @@ -5127,6 +26897,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", @@ -5138,6 +26909,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.0-next.1" @@ -5147,6 +26919,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, "requires": { "isobject": "^3.0.1" } @@ -5163,7 +26936,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, "requires": { "mimic-fn": "^2.1.0" } @@ -5184,7 +26956,7 @@ "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==" }, "os-tmpdir": { "version": "1.0.2", @@ -5192,18 +26964,11 @@ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, - "p-each-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", - "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", - "requires": { - "p-reduce": "^1.0.0" - } - }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true }, "p-limit": { "version": "2.3.0", @@ -5217,15 +26982,11 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, "requires": { "p-limit": "^2.0.0" } }, - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=" - }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -5244,6 +27005,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, "requires": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -5252,22 +27014,24 @@ "parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==" }, "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true }, "path-is-absolute": { "version": "1.0.1", @@ -5277,17 +27041,19 @@ "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, "requires": { "pify": "^3.0.0" } @@ -5295,25 +27061,23 @@ "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true }, "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "requires": { - "node-modules-regexp": "^1.0.0" - } + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" }, "pixelmatch": { "version": "5.2.1", @@ -5334,15 +27098,11 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, "requires": { "find-up": "^3.0.0" } }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" - }, "pngjs": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", @@ -5351,7 +27111,8 @@ "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true }, "prelude-ls": { "version": "1.1.2", @@ -5359,30 +27120,36 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + } } }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, "prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "requires": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -5394,9 +27161,9 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, "pump": { "version": "3.0.0", @@ -5413,57 +27180,116 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "puppeteer": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.20.0.tgz", - "integrity": "sha512-bt48RDBy2eIwZPrkgbcwHtb51mj2nKvHOPMaSH2IsWiv7lOG9k9zhaRzpDZafrk05ajMc3cu+lSQYYOfH2DkVQ==", - "requires": { - "debug": "^4.1.0", - "extract-zip": "^1.6.6", - "https-proxy-agent": "^2.2.1", - "mime": "^2.0.3", - "progress": "^2.0.1", - "proxy-from-env": "^1.0.0", - "rimraf": "^2.6.1", - "ws": "^6.1.0" + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-13.7.0.tgz", + "integrity": "sha512-U1uufzBjz3+PkpCxFrWzh4OrMIdIb2ztzCu0YEPfRHjHswcSwHZswnK+WdsOQJsRV8WeTg3jLhJR4D867+fjsA==", + "requires": { + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.981744", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "pkg-dir": "4.2.0", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.5.0" }, "dependencies": { "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "^4.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "requires": { - "async-limiter": "~1.0.0" + "glob": "^7.1.3" } + }, + "ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "requires": {} } } }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "^5.1.0" + } }, "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, "requires": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", @@ -5474,29 +27300,27 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "dev": true, "requires": { "find-up": "^3.0.0", "read-pkg": "^3.0.0" } }, "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { - "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" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, "realpath-native": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", + "dev": true, "requires": { "util.promisify": "^1.0.0" } @@ -5535,6 +27359,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -5586,108 +27411,79 @@ "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true }, "repeat-element": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "requires": { - "lodash": "^4.17.19" - } - }, - "request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "requires": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "requires": { - "resolve-from": "^3.0.0" + "resolve-from": "^5.0.0" } }, "resolve-dir": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", - "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", + "integrity": "sha512-QxMPqI6le2u0dCLyiGzgy92kjkkL6zO0XyvHzjdTNH3zM6e5Hz3BwG6+aEyNgiQ5Xz6PwTwgQEj3U50dByPKIA==", "requires": { "expand-tilde": "^1.2.2", "global-modules": "^0.2.3" } }, "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "resolve.exports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", + "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==" }, "restore-cursor": { "version": "3.1.0", @@ -5702,7 +27498,8 @@ "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true }, "rimraf": { "version": "2.7.1", @@ -5715,7 +27512,8 @@ "rsvp": { "version": "4.8.5", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true }, "run-async": { "version": "2.4.1", @@ -5723,11 +27521,6 @@ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true }, - "rx": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", - "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=" - }, "rxjs": { "version": "6.6.3", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", @@ -5746,6 +27539,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, "requires": { "ret": "~0.1.10" } @@ -5759,6 +27553,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "dev": true, "requires": { "@cnakazawa/watch": "^1.0.3", "anymatch": "^2.0.0", @@ -5771,10 +27566,13 @@ "walker": "~1.0.5" } }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "requires": { + "xmlchars": "^2.2.0" + } }, "schema-utils": { "version": "2.7.1", @@ -5792,15 +27590,21 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "peer": true, + "requires": { + "randombytes": "^2.1.0" + } }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -5812,6 +27616,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -5821,7 +27626,7 @@ "shallow-clone": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", - "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", + "integrity": "sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw==", "requires": { "is-extendable": "^0.1.1", "kind-of": "^2.0.1", @@ -5832,7 +27637,7 @@ "kind-of": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", - "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", + "integrity": "sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==", "requires": { "is-buffer": "^1.0.2" } @@ -5840,7 +27645,7 @@ "lazy-cache": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", - "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=" + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==" } } }, @@ -5848,6 +27653,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -5855,17 +27661,13 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true }, "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "sisteransi": { "version": "1.0.5", @@ -5875,7 +27677,8 @@ "slash": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true }, "slice-ansi": { "version": "2.1.0", @@ -5892,6 +27695,7 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, "requires": { "base": "^0.11.1", "debug": "^2.2.0", @@ -5907,6 +27711,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -5915,6 +27720,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -5922,7 +27728,8 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true } } }, @@ -5930,6 +27737,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, "requires": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -5940,6 +27748,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -5948,6 +27757,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -5956,6 +27766,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -5964,6 +27775,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -5976,6 +27788,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, "requires": { "kind-of": "^3.2.0" }, @@ -5984,6 +27797,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -5999,6 +27813,7 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, "requires": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0", @@ -6008,9 +27823,9 @@ } }, "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -6019,23 +27834,24 @@ "source-map-url": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true }, "spawnd": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/spawnd/-/spawnd-4.4.0.tgz", - "integrity": "sha512-jLPOfB6QOEgMOQY15Z6+lwZEhH3F5ncXxIaZ7WHPIapwNNLyjrs61okj3VJ3K6tmP5TZ6cO0VAu9rEY4MD4YQg==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/spawnd/-/spawnd-6.2.0.tgz", + "integrity": "sha512-qX/I4lQy4KgVEcNle0kuc4FxFWHISzBhZW1YemPfwmrmQjyZmfTK/OhBKkhrD2ooAaFZEm1maEBLE6/6enwt+g==", "requires": { "exit": "^0.1.2", - "signal-exit": "^3.0.2", - "tree-kill": "^1.2.2", - "wait-port": "^0.2.7" + "signal-exit": "^3.0.7", + "tree-kill": "^1.2.2" } }, "spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -6044,12 +27860,14 @@ "spdx-exceptions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true }, "spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -6058,12 +27876,14 @@ "spdx-license-ids": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", - "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==" + "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", + "dev": true }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, "requires": { "extend-shallow": "^3.0.0" } @@ -6071,24 +27891,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "ssim.js": { "version": "3.5.0", @@ -6099,6 +27902,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.3.tgz", "integrity": "sha512-WldO+YmqhEpjp23eHZRhOT1NQF51STsbxZ+/AdpFD+EhheFxAe5d0WoK4DQVJkSHacPrJJX3OqRAl9CgHf78pg==", + "dev": true, "requires": { "escape-string-regexp": "^2.0.0" }, @@ -6106,7 +27910,8 @@ "escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true } } }, @@ -6114,6 +27919,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -6123,37 +27929,48 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } } } }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } }, "string-length": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", - "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^4.0.0" + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^5.0.1" } } } @@ -6162,6 +27979,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -6172,6 +27990,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", + "dev": true, "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3" @@ -6181,23 +28000,17 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", + "dev": true, "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, "requires": { "ansi-regex": "^4.1.0" } @@ -6205,18 +28018,24 @@ "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, "supports-color": { "version": "5.5.0", @@ -6226,6 +28045,35 @@ "has-flag": "^3.0.0" } }, + "supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, "symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -6243,10 +28091,129 @@ "string-width": "^3.0.0" } }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "peer": true + }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + } + }, + "terser": { + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", + "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "peer": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "peer": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "peer": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "test-exclude": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "dev": true, "requires": { "glob": "^7.1.3", "minimatch": "^3.0.4", @@ -6261,15 +28228,14 @@ "dev": true }, "throat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", - "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=" + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", + "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==" }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "tmp": { "version": "0.0.33", @@ -6281,9 +28247,9 @@ } }, "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" }, "to-fast-properties": { "version": "2.0.0", @@ -6294,6 +28260,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -6302,6 +28269,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -6312,6 +28280,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, "requires": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -6323,26 +28292,29 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" } }, "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", + "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" } }, "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "requires": { - "punycode": "^2.1.0" + "punycode": "^2.1.1" } }, "tree-kill": { @@ -6356,19 +28328,6 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -6377,16 +28336,33 @@ "prelude-ls": "~1.1.2" } }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + }, "type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", @@ -6420,6 +28396,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -6427,10 +28404,16 @@ "set-value": "^2.0.1" } }, + "universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" + }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, "requires": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -6440,6 +28423,7 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, "requires": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -6450,6 +28434,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, "requires": { "isarray": "1.0.0" } @@ -6459,7 +28444,8 @@ "has-values": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true } } }, @@ -6467,6 +28453,7 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "dev": true, "requires": { "punycode": "^2.1.0" } @@ -6474,22 +28461,34 @@ "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "util.promisify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.2", @@ -6497,36 +28496,39 @@ "object.getownpropertydescriptors": "^2.1.0" } }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, "v8-compile-cache": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", "dev": true }, + "v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" + } + } + }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -6535,45 +28537,38 @@ "browser-process-hrtime": "^1.0.0" } }, - "wait-on": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-3.3.0.tgz", - "integrity": "sha512-97dEuUapx4+Y12aknWZn7D25kkjMk16PbWoYzpSdA8bYpVfS6hpl2a2pOWZ3c+Tyt3/i4/pglyZctG3J4V1hWQ==", + "w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", "requires": { - "@hapi/joi": "^15.0.3", - "core-js": "^2.6.5", - "minimist": "^1.2.0", - "request": "^2.88.0", - "rx": "^4.1.0" + "xml-name-validator": "^3.0.0" } }, - "wait-port": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/wait-port/-/wait-port-0.2.9.tgz", - "integrity": "sha512-hQ/cVKsNqGZ/UbZB/oakOGFqic00YAMM5/PEj3Bt4vKarv2jWIWzDbqlwT94qMs/exAQAsvMOq99sZblV92zxQ==", - "requires": { - "chalk": "^2.4.2", - "commander": "^3.0.2", - "debug": "^4.1.1" + "wait-on": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", + "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", + "requires": { + "axios": "^0.25.0", + "joi": "^17.6.0", + "lodash": "^4.17.21", + "minimist": "^1.2.5", + "rxjs": "^7.5.4" }, "dependencies": { - "commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "rxjs": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", "requires": { - "ms": "2.1.2" + "tslib": "^2.1.0" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" } } }, @@ -6585,10 +28580,75 @@ "makeerror": "1.0.x" } }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "peer": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" + }, + "webpack": { + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", + "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "dev": true, + "peer": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "peer": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "peer": true }, "whatwg-encoding": { "version": "1.0.5", @@ -6604,13 +28664,13 @@ "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" }, "whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" } }, "which": { @@ -6621,24 +28681,75 @@ "isexe": "^2.0.0" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } } }, "wrappy": { @@ -6659,6 +28770,7 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", + "dev": true, "requires": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", @@ -6666,57 +28778,93 @@ } }, "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "requires": { - "async-limiter": "~1.0.0" - } + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "requires": {} }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } } }, "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" }, "yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "requires": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } } } -} +} \ No newline at end of file diff --git a/tests/frontend/e2e/package.json b/tests/frontend/e2e/package.json index 78fac8eb..aa2a0a6b 100644 --- a/tests/frontend/e2e/package.json +++ b/tests/frontend/e2e/package.json @@ -4,14 +4,29 @@ "description": "NetPyNe UI tests", "license": "unlicensed", "scripts": { - "test": "jest --verbose", + "test": "sleep 60 && npm run simple_tutorials_test && npm run complex_tutorials_test && npm run features_test", + "puppeteer_test": "jest --verbose", + "simple_tutorials_test": "sleep 60 && jest --verbose Tut#1_smoke Tut#2_smoke Tut#4_smoke", + "complex_tutorials_test": "jest --verbose Tut#3a_smoke Tut#3b_smoke Tut#3c_smoke", + "features_test": "jest --verbose ControlPanel SaveOpenFile RxD EEG_and_Dipole_Tut#1 ExperimentManager_Tut#1", + "EEG_Dipole_test": "jest --verbose EEG_and_Dipole_Tut#1 ", + "Experiment_Manager_test": "jest --verbose ExperimentManager_Tut#1 ", + "Tutorial_1_test": "jest --verbose Tut#1_smoke ", + "Tutorial_2_test": "jest --verbose Tut#2_smoke ", + "Tutorial_3A_test": "jest --verbose Tut#3a_smoke ", + "Tutorial_3B_test": "jest --verbose Tut#3b_smoke ", + "Tutorial_3C_test": "jest --verbose Tut#3c_smoke ", + "Tutorial_4_test": "jest --verbose Tut#4_smoke ", + "Control_Panel_test": "jest --verbose ControlPanel ", + "Save_Open_File_test": "jest --verbose SaveOpenFile", + "RxD_test": "jest --verbose RxD", "lint": "eslint --fix --ext .js,.jsx ." }, "dependencies": { - "jest": "^24.9.0", - "jest-image-snapshot": "^4.2.0", - "jest-puppeteer": "^4.4.0", - "puppeteer": "^1.20.0" + "jest": "^27.5.1", + "jest-image-snapshot": "^4.5.1", + "jest-puppeteer": "^6.1.0", + "puppeteer": "^13.5.1" }, "devDependencies": { "@babel/core": "^7.4.5", @@ -23,13 +38,13 @@ "@babel/preset-stage-2": "^7.0.0", "@babel/runtime": "^7.4.5", "babel-eslint": "^10.0.1", - "eslint": "^6.0.1", - "eslint-plugin-jest": "^22.21.0", "babel-jest": "^24.9.0", "babel-loader": "^8.0.6", "babel-plugin-transform-decorators-legacy": "^1.3.5", "babel-plugin-transform-object-assign": "^6.8.0", - "babel-plugin-transform-runtime": "^6.15.0" + "babel-plugin-transform-runtime": "^6.15.0", + "eslint": "^6.0.1", + "eslint-plugin-jest": "^22.21.0" }, "buildOptions": { "emitEntryPoint": true, @@ -39,4 +54,4 @@ ] } } -} +} \ No newline at end of file diff --git a/tests/frontend/e2e/tests/ControlPanel.test.js b/tests/frontend/e2e/tests/ControlPanel.test.js new file mode 100644 index 00000000..9f3f0a84 --- /dev/null +++ b/tests/frontend/e2e/tests/ControlPanel.test.js @@ -0,0 +1,337 @@ +//IMPORTS: +import 'expect-puppeteer'; +import puppeteer from 'puppeteer'; +import { click } from './utils'; +import { toMatchImageSnapshot } from 'jest-image-snapshot' +expect.extend({ toMatchImageSnapshot }) +const path = require('path'); +var scriptName = path.basename(__filename, '.js'); +import * as selectors from './selectors' + + +//PAGE INFO: +const baseURL = process.env.url || 'https://test.netpyne.metacell.us/' +const PAGE_WAIT = 3000; +const TIMEOUT = 60000; + +//SNAPSHOT: +const SNAPSHOT_OPTIONS = { + customSnapshotsDir: `./tests/snapshots/Tut#2_smoke.test/`, + comparisonMethod: 'ssim', + failureThresholdType: 'percent', + failureThreshold: 0.25 +}; + +let r = (Math.random() + 1).toString(36).substring(2); + +//USERS: +const USERNAME = `TestUser${r}` +const PASSWORD = 'testpassword' + +//TESTS: + +jest.setTimeout(3000000); +let browser_control_panel; +let control_panel_page; + + +describe('Test for the Control Panel - color picker', () => { + + beforeAll(async () => { + browser_control_panel = await puppeteer.launch( + { + headless: 'new', + args: ['--no-sandbox', '--disable-setuid-sandbox'], + defaultViewport: { + width: 1300, + height: 1024 + }, + } + ); + control_panel_page = await browser_control_panel.newPage(); + await control_panel_page.goto(baseURL); + if (baseURL.includes('test.netpyne.metacell.us')) { + console.log('Logging in as test user ...') + await control_panel_page.waitForSelector(selectors.LOGIN_PAGE_SELECTOR); + await control_panel_page.waitForSelector(selectors.USERNAME_SELECTOR) + await expect(control_panel_page) + .toFill(selectors.USERNAME_SELECTOR, USERNAME, { timeout: TIMEOUT }); + + await control_panel_page.waitForSelector(selectors.PASSWORD_SELECTOR) + await expect(control_panel_page) + .toFill(selectors.PASSWORD_SELECTOR, PASSWORD, { timeout: TIMEOUT }); + + await control_panel_page.click(selectors.LOGIN_BUTTON_SELECTOR) + // Wait for initial loading spinner to disappear + await control_panel_page.waitForFunction(() => { + let el = document.querySelector('#loading-spinner'); + return el == null || el.clientHeight === 0; + }, { timeout: TIMEOUT }); + console.log('Logged in successfully') + } + }); + + afterAll(async () => { + // Close the browser instance after all tests have run + await browser_control_panel.close(); + }); + + it('Open new page', async () => { + + console.log('Opening a new NetPyNE page') + + await control_panel_page.on("dialog", dialog => + dialog.accept()); + + await control_panel_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT * 6, visible: true }) + await control_panel_page.waitForSelector(selectors.FILE_TAB_SELECTOR, { timeout: PAGE_WAIT * 3 }) + await control_panel_page.waitForTimeout(PAGE_WAIT) + await control_panel_page.click(selectors.FILE_TAB_SELECTOR) + await control_panel_page.waitForSelector(selectors.NEW_FILE_SELECTOR, { timeout: PAGE_WAIT * 3 }) + await control_panel_page.waitForTimeout(PAGE_WAIT) + await control_panel_page.click(selectors.NEW_FILE_SELECTOR) + await control_panel_page.waitForTimeout(PAGE_WAIT) + await control_panel_page.waitForSelector(selectors.CONFIRM_NEW_PAGE_SELECTOR) + await control_panel_page.click(selectors.CONFIRM_NEW_PAGE_SELECTOR) + await control_panel_page.waitForTimeout(PAGE_WAIT * 2) + + await control_panel_page.waitForFunction(() => { + let el = document.querySelector('#loading-spinner'); + return el == null || el.clientHeight === 0; + }, { timeout: TIMEOUT }); + + await control_panel_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT * 10 }) + + console.log('Page opened successfully') + + }) + + it('Load Tutorial#2', async () => { + + await control_panel_page.waitForTimeout(PAGE_WAIT * 2) + await control_panel_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT }) + await control_panel_page.waitForTimeout(PAGE_WAIT) + await control_panel_page.waitForSelector(selectors.TUTORIALS_BUTTON_SELECTOR, { timeout: TIMEOUT }) + await control_panel_page.click(selectors.TUTORIALS_BUTTON_SELECTOR, { timeout: TIMEOUT }) + + console.log('Loading Tutorial #2') + await control_panel_page.waitForSelector(selectors.TUTORIAL_2_SELECTOR, { timeout: TIMEOUT }) + await control_panel_page.click(selectors.TUTORIAL_2_SELECTOR, { timeout: TIMEOUT }) + await control_panel_page.waitForTimeout(PAGE_WAIT) + await control_panel_page.waitForSelector(selectors.PYR_2_CELL_SELECTOR) + await control_panel_page.waitForSelector(selectors.INT_CELL_SELECTOR) + await control_panel_page.waitForTimeout(PAGE_WAIT) + + console.log('Tutorial #2 loaded successfully') + + }) + + + it('Create network', async () => { + + await control_panel_page.waitForSelector(selectors.MODEL_BUTTON_SELECTOR) + await control_panel_page.click(selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await control_panel_page.waitForSelector(selectors.CREATE_NETWORK_SELECTOR) + await control_panel_page.click(selectors.CREATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + + console.log('Create network') + + await control_panel_page.waitForSelector(selectors.DISABLED_RASTER_PLOT_SELECTOR, { timeout: TIMEOUT * 3 }) + + console.log('Network created successfully') + + await control_panel_page.waitForTimeout(PAGE_WAIT) + + console.log('... taking snapshot ...'); + await control_panel_page.waitForTimeout(PAGE_WAIT); + expect(await control_panel_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Tutorial#2 Network' + }); + }) + + it('Open Color Picker Menu', async () => { + + console.log('Opening Control Panel') + + await control_panel_page.waitForSelector(selectors.CONTROL_PANEL_TAB_SELECTOR) + await control_panel_page.click(selectors.CONTROL_PANEL_TAB_SELECTOR) + await control_panel_page.waitForSelector(selectors.NETWORKS_IN_CONTROL_PANEL_SELECTOR) + + const network_items = (await control_panel_page.$$(selectors.NETWORK_ITEMS_CONTROL_PANEL_SELECTOR)).length; + await expect(network_items).toEqual(3) + + console.log('Control Panel displayed successfully') + + }) + + it('Randomize Main Level network color', async () => { + + console.log('Randomize Main Level network color') + + await control_panel_page.waitForTimeout(PAGE_WAIT * 3) + await control_panel_page.waitForSelector(selectors.CONTROL_PANEL_TABLE_SELECTOR) + + const primary_level_colors = await control_panel_page.$$eval(selectors.COLOR_RECT_SELECTOR, primary_level_colors => { + return primary_level_colors.map(primary_level_color => primary_level_color.outerHTML); + }); + + expect(primary_level_colors[0]).toContain('fill="#FF7F99"') + expect(primary_level_colors[0]).toEqual(primary_level_colors[1]) + expect(primary_level_colors[1]).toEqual(primary_level_colors[2]) + + await control_panel_page.waitForTimeout(PAGE_WAIT) + + const rows = await control_panel_page.$$(selectors.CONTROL_PANEL_NETWORK_ROWS_SELECTOR) + for (var i = 0; i < rows.length; i++) { + await rows[0].hover() + } + + const buttons = await control_panel_page.$$(selectors.COLOR_CONTROL_BUTTONS_SELECTOR) + + for (var i = 0; i < buttons.length; i++) { + await buttons[1].click() + } + + await control_panel_page.waitForTimeout(PAGE_WAIT) + + const rndm_primary_level_colors = await control_panel_page.$$eval(selectors.COLOR_RECT_SELECTOR, rndm_primary_level_colors => { + return rndm_primary_level_colors.map(rndm_primary_level_color => rndm_primary_level_color.outerHTML); + }); + + expect(rndm_primary_level_colors[0]).toContain('fill="#989898"') + expect(rndm_primary_level_colors[2]).not.toEqual(rndm_primary_level_colors[1]) + + console.log('Main Network color randomized successfully') + + await control_panel_page.waitForTimeout(PAGE_WAIT) + + }) + + it('Randomize Sub level E network color', async () => { + + console.log('Randomize Sub Level E network color') + await control_panel_page.waitForSelector(selectors.CONTROL_PANEL_NETWORK_ROWS_SELECTOR, { timeout: TIMEOUT }) + const rows = await control_panel_page.$$(selectors.CONTROL_PANEL_NETWORK_ROWS_SELECTOR) + for (var i = 0; i < rows.length; i++) { + await rows[1].click() + await rows[1].hover() + } + await control_panel_page.waitForTimeout(PAGE_WAIT) + + const second_level_colors = await control_panel_page.$$eval(selectors.COLOR_RECT_SELECTOR, second_level_colors => { + return second_level_colors.map(second_level_color => second_level_color.outerHTML); + }); + + + expect(second_level_colors[1]).toEqual(second_level_colors[2]) + expect(second_level_colors[2]).toEqual(second_level_colors[3]) + + + const buttons = await control_panel_page.$$(selectors.COLOR_CONTROL_BUTTONS_SELECTOR) + + for (var i = 0; i < buttons.length; i++) { + await buttons[2].click() + } + + await control_panel_page.waitForTimeout(PAGE_WAIT * 2) + + const second_level_colors_after_rndm = await control_panel_page.$$eval(selectors.COLOR_RECT_SELECTOR, second_level_colors_after_rndm => { + return second_level_colors_after_rndm.map(second_level_color_after_rndm => second_level_color_after_rndm.outerHTML); + }); + + expect(second_level_colors_after_rndm[1]).toContain('fill="#989898"') + expect(second_level_colors_after_rndm[2]).not.toEqual(second_level_colors_after_rndm[3]) + expect(second_level_colors_after_rndm[2]).not.toEqual(second_level_colors_after_rndm[1]) + + console.log('E Network color randomized successfully') + + await control_panel_page.waitForTimeout(PAGE_WAIT * 3) + + }) + + + it('Pick a color for the sublevel I netowrk', async () => { + + console.log('Selecting a color for the I network') + await control_panel_page.waitForSelector(selectors.CONTROL_PANEL_NETWORK_ROWS_SELECTOR, { timeout: TIMEOUT }) + const rows = await control_panel_page.$$(selectors.CONTROL_PANEL_NETWORK_ROWS_SELECTOR) + for (var i = 0; i < rows.length; i++) { + await rows[1].click() + } + + await control_panel_page.waitForTimeout(PAGE_WAIT) + + const rows_ = await control_panel_page.$$(selectors.CONTROL_PANEL_NETWORK_ROWS_SELECTOR) + + for (var i = 0; i < rows_.length; i++) { + await rows_[2].click() + } + + await control_panel_page.waitForTimeout(PAGE_WAIT) + + const network_colors = await control_panel_page.$$eval(selectors.COLOR_RECT_SELECTOR, network_colors => { + return network_colors.map(network_color => network_color.outerHTML); + }); + + expect(network_colors[3]).toEqual(network_colors[4]) + expect(network_colors[3]).toEqual(network_colors[2]) + + await control_panel_page.waitForTimeout(PAGE_WAIT * 3) + + const buttons = await control_panel_page.$$(selectors.COLOR_CONTROL_BUTTONS_SELECTOR) + + for (var i = 0; i < buttons.length; i++) { + await buttons[4].click() + } + + await control_panel_page.waitForTimeout(PAGE_WAIT) + + const list_bounds = await control_panel_page.$(selectors.NETWORKS_IN_CONTROL_PANEL_SELECTOR); + const rect = await control_panel_page.evaluate((list_bounds) => { + const { top, left, bottom, right } = list_bounds.getBoundingClientRect(); + return { top, left, bottom, right }; + }, list_bounds); + + await control_panel_page.waitForTimeout(PAGE_WAIT) + await control_panel_page.mouse.click(Math.round(rect.right) - 40, Math.round(rect.bottom) + 40) + await control_panel_page.waitForTimeout(PAGE_WAIT * 2) + + const rows_after_colouring_I = await control_panel_page.$$(selectors.CONTROL_PANEL_NETWORK_ROWS_SELECTOR) + for (var i = 0; i < rows_after_colouring_I.length; i++) { + await rows_after_colouring_I[2].click() + } + + const network_colors_after_colouring_I = await control_panel_page.$$eval(selectors.COLOR_RECT_SELECTOR, network_colors_after_colouring_I => { + return network_colors_after_colouring_I.map(network_color_after_colouring_I => network_color_after_colouring_I.outerHTML); + }); + await control_panel_page.waitForTimeout(PAGE_WAIT) + + expect(network_colors_after_colouring_I[2]).toEqual(network_colors_after_colouring_I[3]) + expect(network_colors_after_colouring_I[2]).toEqual(network_colors_after_colouring_I[4]) + + console.log('I network color selected successfully') + + }) + + it('Filter results from the Control panel', async () => { + + await control_panel_page.waitForTimeout(PAGE_WAIT) + console.log('Filtering results') + + await control_panel_page.waitForSelector(selectors.CONTROL_PANEL_FILTER_SELECTOR, {timeout: PAGE_WAIT}) + await control_panel_page.type(selectors.CONTROL_PANEL_FILTER_SELECTOR, 'E') + + await control_panel_page.waitForTimeout(PAGE_WAIT) + await control_panel_page.waitForSelector(selectors.NETWORKS_IN_CONTROL_PANEL_SELECTOR) + + const network_items = (await control_panel_page.$$(selectors.NETWORK_ITEMS_CONTROL_PANEL_SELECTOR)).length; + await expect(network_items).toEqual(3) + + console.log('Results filtered successfully') + + }) + + +}); \ No newline at end of file diff --git a/tests/frontend/e2e/tests/EEG_and_Dipole_Tut#1.test.js b/tests/frontend/e2e/tests/EEG_and_Dipole_Tut#1.test.js new file mode 100644 index 00000000..4fdfa25f --- /dev/null +++ b/tests/frontend/e2e/tests/EEG_and_Dipole_Tut#1.test.js @@ -0,0 +1,246 @@ +//IMPORTS: +import 'expect-puppeteer'; +import puppeteer from 'puppeteer'; +import { click } from './utils'; +import { toMatchImageSnapshot } from 'jest-image-snapshot' +expect.extend({ toMatchImageSnapshot }) +const path = require('path'); +var scriptName = path.basename(__filename, '.js'); +import * as selectors from './selectors' + + +//PAGE INFO: +const baseURL = process.env.url || 'https://test.netpyne.metacell.us/' +const PAGE_WAIT = 3000; +const TIMEOUT = 60000; + +//SNAPSHOT: +const SNAPSHOT_OPTIONS = { + customSnapshotsDir: `./tests/snapshots/${scriptName}`, + comparisonMethod: 'ssim', + customDiffConfig: { + ssim: 'fast', + }, + failureThresholdType: 'percent', + failureThreshold: 0.2 +}; + + + +let r = (Math.random() + 1).toString(36).substring(2); + +//USERS: +const USERNAME = `TestUser${r}` +const PASSWORD = 'testpassword' + + +//TESTS: + +jest.setTimeout(3000000); +let browser_EEG_Dipole; +let EEG_Dipole_page; + +beforeAll(async () => { + + browser_EEG_Dipole = await puppeteer.launch( + { + headless: 'new', + args: ['--no-sandbox', '--disable-setuid-sandbox'], + defaultViewport: { + width: 1300, + height: 1024 + }, + } + ); + EEG_Dipole_page = await browser_EEG_Dipole.newPage(); + await EEG_Dipole_page.goto(baseURL); + if (baseURL.includes('test.netpyne.metacell.us')) { + console.log('Logging in as test user ...') + await EEG_Dipole_page.waitForSelector(selectors.LOGIN_PAGE_SELECTOR); + await EEG_Dipole_page.waitForSelector(selectors.USERNAME_SELECTOR) + await expect(EEG_Dipole_page) + .toFill(selectors.USERNAME_SELECTOR, USERNAME, { timeout: TIMEOUT }); + + await EEG_Dipole_page.waitForSelector(selectors.PASSWORD_SELECTOR) + await expect(EEG_Dipole_page) + .toFill(selectors.PASSWORD_SELECTOR, PASSWORD, { timeout: TIMEOUT }); + + await EEG_Dipole_page.click(selectors.LOGIN_BUTTON_SELECTOR) + // Wait for initial loading spinner to disappear + await EEG_Dipole_page.waitForFunction(() => { + let el = document.querySelector('#loading-spinner'); + return el == null || el.clientHeight === 0; + }, { timeout: TIMEOUT }); + console.log('Logged in successfully') + } +}); + +afterAll(async () => { + // Close the browser instance after all tests have run + await browser_EEG_Dipole.close(); + }); + +describe('EEG and Dipole Plot Test using Tutorial#1', () => { + + it('Open new page', async () => { + + console.log('Opening a new NetPyNE page') + + await EEG_Dipole_page.on("dialog", dialog => + dialog.accept()); + + await EEG_Dipole_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT * 6, visible: true }) + await EEG_Dipole_page.waitForSelector(selectors.FILE_TAB_SELECTOR, { timeout: PAGE_WAIT * 3 }) + await EEG_Dipole_page.waitForTimeout(PAGE_WAIT) + await EEG_Dipole_page.click(selectors.FILE_TAB_SELECTOR) + await EEG_Dipole_page.waitForSelector(selectors.NEW_FILE_SELECTOR, { timeout: PAGE_WAIT * 3 }) + await EEG_Dipole_page.waitForTimeout(PAGE_WAIT) + await EEG_Dipole_page.click(selectors.NEW_FILE_SELECTOR) + await EEG_Dipole_page.waitForTimeout(PAGE_WAIT) + await EEG_Dipole_page.waitForSelector(selectors.CONFIRM_NEW_PAGE_SELECTOR) + await EEG_Dipole_page.click(selectors.CONFIRM_NEW_PAGE_SELECTOR) + await EEG_Dipole_page.waitForTimeout(PAGE_WAIT * 2) + + await EEG_Dipole_page.waitForFunction(() => { + let el = document.querySelector('#loading-spinner'); + return el == null || el.clientHeight === 0; + }, { timeout: TIMEOUT }); + + await EEG_Dipole_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT * 10 }) + + console.log('Page opened successfully') + + }) + + + it('Load Tutorial#1', async () => { + + await EEG_Dipole_page.waitForTimeout(PAGE_WAIT * 3) + await EEG_Dipole_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT * 2 }) + await EEG_Dipole_page.waitForTimeout(PAGE_WAIT * 2) + await EEG_Dipole_page.click(selectors.TUTORIALS_BUTTON_SELECTOR, { timeout: TIMEOUT }) + + await console.log('Loading Tutorial #1') + await EEG_Dipole_page.click(selectors.TUTORIAL_1_SELECTOR, { timeout: TIMEOUT }) + await EEG_Dipole_page.waitForSelector(selectors.PYR_CELL_SELECTOR, { timeout: TIMEOUT * 2 }) + await EEG_Dipole_page.waitForTimeout(PAGE_WAIT) + + + }) + + it('Configure recording ', async () => { + + await console.log('Setting Recording configuration') + + await EEG_Dipole_page.waitForSelector(selectors.CONFIGURATION_TAB_SELECTOR) + await EEG_Dipole_page.click(selectors.CONFIGURATION_TAB_SELECTOR) + + await EEG_Dipole_page.waitForSelector(selectors.RECORDING_CONFIGURATION_TAB_SELECTOR) + await EEG_Dipole_page.click(selectors.RECORDING_CONFIGURATION_TAB_SELECTOR) + await EEG_Dipole_page.waitForTimeout(PAGE_WAIT) + + await EEG_Dipole_page.waitForSelector(selectors.TRACES_TO_RECORD_SELECTOR) + await EEG_Dipole_page.waitForTimeout(PAGE_WAIT) + await EEG_Dipole_page.waitForSelector(selectors.DIPOLE_LFPYKIT_SELECTOR) + // await expect(page).toClick(selectors.DIPOLE_LFPYKIT_SELECTOR) + await EEG_Dipole_page.waitForTimeout(PAGE_WAIT) + await EEG_Dipole_page.click(selectors.DIPOLE_LFPYKIT_SELECTOR) + await EEG_Dipole_page.waitForTimeout(PAGE_WAIT) + + }) + + it('Create network', async () => { + + await EEG_Dipole_page.waitForSelector(selectors.MODEL_BUTTON_SELECTOR) + await EEG_Dipole_page.click(selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await EEG_Dipole_page.waitForSelector(selectors.CREATE_NETWORK_SELECTOR) + await EEG_Dipole_page.click(selectors.CREATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + + await console.log('Create network') + + await EEG_Dipole_page.waitForSelector(selectors.DISABLED_EEG_PLOT_SELECTOR, { timeout: TIMEOUT * 3 }) + await EEG_Dipole_page.waitForSelector(selectors.DISABLED_DIPOLE_PLOT_SELECTOR, { timeout: TIMEOUT * 3 }) + + await EEG_Dipole_page.waitForTimeout(PAGE_WAIT) + + await console.log('... taking snapshot ...'); + await EEG_Dipole_page.waitForTimeout(PAGE_WAIT); + expect(await EEG_Dipole_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Tutorial#1 Network' + }); + }) + + it('Simulate network', async () => { + + await EEG_Dipole_page.waitForSelector(selectors.SIMULATE_BUTTON_SELECTOR) + await EEG_Dipole_page.click(selectors.SIMULATE_BUTTON_SELECTOR, { timeout: TIMEOUT }); + + await console.log('Simulate network') + + await EEG_Dipole_page.waitForSelector(selectors.SIMULATION_PAGE_SELECTOR, { timeout: TIMEOUT * 2 }); + + await EEG_Dipole_page.waitForSelector(selectors.RASTER_PLOT_SELECTOR, { timeout: TIMEOUT * 5 }) + await EEG_Dipole_page.waitForSelector(selectors.EEG_PLOT_SELECTOR, { timeout: TIMEOUT * 5 }) + await EEG_Dipole_page.waitForSelector(selectors.DIPOLE_PLOT_SELECTOR, { timeout: TIMEOUT * 5 }) + }); + + it('Dipole Plot', async () => { + + await EEG_Dipole_page.waitForTimeout(PAGE_WAIT * 2); + await EEG_Dipole_page.waitForSelector(selectors.DIPOLE_PLOT_SELECTOR) + await EEG_Dipole_page.click(selectors.DIPOLE_PLOT_SELECTOR) + await EEG_Dipole_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + + await console.log('View Dipole Plot ...') + + await EEG_Dipole_page.waitForSelector('#plot > div > div > img', { timeout: TIMEOUT * 10, hidden: false}) + + await EEG_Dipole_page.waitForTimeout(PAGE_WAIT * 2); + // await EEG_Dipole_page.click(selectors.CONNECTIONS_PLOT_SELECTOR, { timeout: TIMEOUT }) + // await EEG_Dipole_page.waitForTimeout(PAGE_WAIT); + // await EEG_Dipole_page.click(selectors.DIPOLE_PLOT_SELECTOR) + // await EEG_Dipole_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + // await EEG_Dipole_page.waitForTimeout(PAGE_WAIT * 3); + + await console.log('... taking snapshot ...'); + expect(await EEG_Dipole_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Dipole Plot' + }); + }); + + + it('EEG Plot', async () => { + + await EEG_Dipole_page.waitForTimeout(PAGE_WAIT * 2); + await EEG_Dipole_page.waitForSelector(selectors.EEG_PLOT_SELECTOR) + await EEG_Dipole_page.click(selectors.EEG_PLOT_SELECTOR) + await EEG_Dipole_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT, hidden: false}) + + await console.log('View EEG Plot ...') + + await EEG_Dipole_page.waitForSelector('#plot > div > div > img', { timeout: TIMEOUT * 10, hidden: false}) + + await EEG_Dipole_page.waitForTimeout(PAGE_WAIT * 7); + // await EEG_Dipole_page.click(selectors.CONNECTIONS_PLOT_SELECTOR, { timeout: TIMEOUT }) + // await EEG_Dipole_page.waitForTimeout(PAGE_WAIT * 2); + // await EEG_Dipole_page.click(selectors.EEG_PLOT_SELECTOR) + // await EEG_Dipole_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + // await EEG_Dipole_page.waitForTimeout(PAGE_WAIT * 3); + + await console.log('... taking snapshot ...'); + expect(await EEG_Dipole_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'EEG Plot' + }); + + }); + + + + +}); \ No newline at end of file diff --git a/tests/frontend/e2e/tests/ExperimentManager_Tut#1.test.js b/tests/frontend/e2e/tests/ExperimentManager_Tut#1.test.js new file mode 100644 index 00000000..7cd382aa --- /dev/null +++ b/tests/frontend/e2e/tests/ExperimentManager_Tut#1.test.js @@ -0,0 +1,392 @@ +//IMPORTS: +import 'expect-puppeteer'; +import puppeteer from 'puppeteer'; +import { click } from './utils'; +import { toMatchImageSnapshot } from 'jest-image-snapshot' +expect.extend({ toMatchImageSnapshot }) +const path = require('path'); +var scriptName = path.basename(__filename, '.js'); +import * as selectors from './selectors' + + +//PAGE INFO: +const baseURL = process.env.url || 'https://test.netpyne.metacell.us/' +const PAGE_WAIT = 3000; +const TIMEOUT = 60000; + +//SNAPSHOT: +const SNAPSHOT_OPTIONS = { + customSnapshotsDir: `./tests/snapshots/${scriptName}`, + comparisonMethod: 'ssim', + customDiffConfig: { + ssim: 'fast', + }, + failureThresholdType: 'percent', + failureThreshold: 0.2 +}; + + +let r = (Math.random() + 1).toString(36).substring(2); + +//USERS: +const USERNAME = `TestUser${r}` +const PASSWORD = 'testpassword' + + +//TESTS: + +jest.setTimeout(3000000); +let browser_experiment_manager; +let experiment_manager_page; + + +describe('Experiment Manager test using Tut#1', () => { + + beforeAll(async () => { + browser_experiment_manager = await puppeteer.launch( + { + headless: 'new', + args: ['--no-sandbox', '--disable-setuid-sandbox'], + defaultViewport: { + width: 1300, + height: 1024 + }, + } + ); + experiment_manager_page = await browser_experiment_manager.newPage(); + await experiment_manager_page.goto(baseURL); + if (baseURL.includes('test.netpyne.metacell.us')) { + console.log('Logging in as test user ...') + await experiment_manager_page.waitForSelector(selectors.LOGIN_PAGE_SELECTOR); + await experiment_manager_page.waitForSelector(selectors.USERNAME_SELECTOR) + await expect(experiment_manager_page) + .toFill(selectors.USERNAME_SELECTOR, USERNAME, { timeout: TIMEOUT }); + + await experiment_manager_page.waitForSelector(selectors.PASSWORD_SELECTOR) + await expect(experiment_manager_page) + .toFill(selectors.PASSWORD_SELECTOR, PASSWORD, { timeout: TIMEOUT }); + + await experiment_manager_page.click(selectors.LOGIN_BUTTON_SELECTOR) + // Wait for initial loading spinner to disappear + await experiment_manager_page.waitForFunction(() => { + let el = document.querySelector('#loading-spinner'); + return el == null || el.clientHeight === 0; + }, { timeout: TIMEOUT }); + console.log('Logged in successfully') + } + }); + + afterAll(async () => { + // Close the browser instance after all tests have run + await browser_experiment_manager.close(); + }); + + it('Open new page', async () => { + + console.log('Opening a new NetPyNE page') + + await experiment_manager_page.on("dialog", dialog => + dialog.accept()); + + await experiment_manager_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT * 6, visible: true }) + await experiment_manager_page.waitForSelector(selectors.FILE_TAB_SELECTOR, { timeout: PAGE_WAIT * 3 }) + await experiment_manager_page.waitForTimeout(PAGE_WAIT) + await experiment_manager_page.click(selectors.FILE_TAB_SELECTOR) + await experiment_manager_page.waitForSelector(selectors.NEW_FILE_SELECTOR, { timeout: PAGE_WAIT * 3 }) + await experiment_manager_page.waitForTimeout(PAGE_WAIT) + await experiment_manager_page.click(selectors.NEW_FILE_SELECTOR) + await experiment_manager_page.waitForTimeout(PAGE_WAIT) + await experiment_manager_page.waitForSelector(selectors.CONFIRM_NEW_PAGE_SELECTOR) + await experiment_manager_page.click(selectors.CONFIRM_NEW_PAGE_SELECTOR) + await experiment_manager_page.waitForTimeout(PAGE_WAIT * 2) + + await experiment_manager_page.waitForFunction(() => { + let el = document.querySelector('#loading-spinner'); + return el == null || el.clientHeight === 0; + }, { timeout: TIMEOUT }); + + await experiment_manager_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT * 10 }) + + console.log('Page opened successfully') + + }) + + it('Load Tutorial#1', async () => { + + await experiment_manager_page.waitForTimeout(PAGE_WAIT * 2) + await experiment_manager_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT }) + await experiment_manager_page.waitForTimeout(PAGE_WAIT) + await click(experiment_manager_page, selectors.TUTORIALS_BUTTON_SELECTOR, { timeout: TIMEOUT }) + + console.log('Tutorial #1') + await click(experiment_manager_page, selectors.TUTORIAL_1_SELECTOR, { timeout: TIMEOUT }) + await experiment_manager_page.waitForTimeout(PAGE_WAIT) + await experiment_manager_page.waitForSelector(selectors.PYR_CELL_SELECTOR) + await experiment_manager_page.waitForTimeout(PAGE_WAIT) + + + }) + + + it('Create network', async () => { + + await experiment_manager_page.waitForSelector(selectors.MODEL_BUTTON_SELECTOR) + await click(experiment_manager_page, selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await experiment_manager_page.waitForSelector(selectors.CREATE_NETWORK_SELECTOR) + await click(experiment_manager_page, selectors.CREATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + + console.log('Create network') + + await experiment_manager_page.waitForSelector(selectors.DISABLED_RASTER_PLOT_SELECTOR, { timeout: TIMEOUT * 3 }) + + await experiment_manager_page.waitForTimeout(PAGE_WAIT) + + console.log('... taking snapshot ...'); + await experiment_manager_page.waitForTimeout(PAGE_WAIT); + expect(await experiment_manager_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Tutorial#1 Network' + }); + }) + + it('Set an Experiment in the Experiment Manager ', async () => { + + console.log('Setting up experiment') + + await experiment_manager_page.waitForSelector(selectors.EXPERIMENT_MANAGER_TAB_SELECTOR) + await experiment_manager_page.click(selectors.EXPERIMENT_MANAGER_TAB_SELECTOR) + await experiment_manager_page.waitForSelector(selectors.CREATE_NEW_EXPERIMENT_SELECTOR) + await experiment_manager_page.click(selectors.CREATE_NEW_EXPERIMENT_SELECTOR) + + await experiment_manager_page.waitForSelector(selectors.CREATE_NEW_EXPERIMENT_POPUP_SELECTOR) + await experiment_manager_page.waitForSelector(selectors.CONFIRM_SELECTOR, { timeout: TIMEOUT, hidden: false }) + await experiment_manager_page.click(selectors.CONFIRM_SELECTOR) + await experiment_manager_page.waitForSelector(selectors.EXPERIMENT_NAME_SELECTOR, { timeout: TIMEOUT , hidden: false}) + await experiment_manager_page.waitForTimeout(PAGE_WAIT); + await expect(experiment_manager_page).toFill(selectors.EXPERIMENT_NAME_SELECTOR, 'Test Experiment', { timeout: TIMEOUT, hidden: false }) + await experiment_manager_page.waitForTimeout(PAGE_WAIT); + await experiment_manager_page.waitForSelector(selectors.PARAMETER_SELECTION_SELECTOR) + await experiment_manager_page.click(selectors.PARAMETER_SELECTION_SELECTOR) + + + await experiment_manager_page.evaluate(() => { + let parameter = document.querySelectorAll('li[class="MuiAutocomplete-option"]'); + for (var i = 0; i < parameter.length; i++) { + parameter[i].innerHTML.includes("numCells") && parameter[i].click(); + } + }); + + await experiment_manager_page.waitForTimeout(PAGE_WAIT); + await experiment_manager_page.waitForSelector(selectors.FROM_VALUE_SELECTOR); + const inputFromValue = await experiment_manager_page.$eval('#undefined-from', el => el.value); + await experiment_manager_page.click(selectors.FROM_VALUE_SELECTOR); + for (let i = 0; i < inputFromValue.length; i++) { + await experiment_manager_page.keyboard.press('Backspace'); + } + + await experiment_manager_page.type(selectors.FROM_VALUE_SELECTOR, '1') + await experiment_manager_page.waitForSelector(selectors.TO_VALUE_SELECTOR); + const inputToValue = await experiment_manager_page.$eval('#undefined-to', el => el.value); + await experiment_manager_page.click(selectors.TO_VALUE_SELECTOR); + for (let i = 0; i < inputToValue.length; i++) { + await experiment_manager_page.keyboard.press('Backspace'); + } + + await experiment_manager_page.type(selectors.TO_VALUE_SELECTOR, '4') + await experiment_manager_page.waitForSelector(selectors.STEP_VALUE_SELECTOR); + const inputStepValue = await experiment_manager_page.$eval('#undefined-step', el => el.value); + await experiment_manager_page.click(selectors.STEP_VALUE_SELECTOR); + for (let i = 0; i < inputStepValue.length; i++) { + await experiment_manager_page.keyboard.press('Backspace'); + } + + await experiment_manager_page.type(selectors.STEP_VALUE_SELECTOR, '1') + + await experiment_manager_page.waitForTimeout(PAGE_WAIT); + await experiment_manager_page.waitForSelector(selectors.CREATE_EXPERIMENT_BUTTON_SELECTOR) + await experiment_manager_page.click(selectors.CREATE_EXPERIMENT_BUTTON_SELECTOR) + + await experiment_manager_page.waitForSelector(selectors.EXPERIMENT_TABLE_HEADER_SELECTOR) + await experiment_manager_page.waitForTimeout(PAGE_WAIT); + + const experiment_name = await experiment_manager_page.evaluate(() => { + document.querySelector('h6[class="MuiTypography-root experimentHead MuiTypography-h6"]').textContent + }); + + const experimentName = await experiment_manager_page.$eval('th[class="MuiTableCell-root MuiTableCell-body"]', el => el.innerText.trim()); + await experiment_manager_page.waitForTimeout(PAGE_WAIT); + expect(experimentName).toBe('Test_Experiment') + await experiment_manager_page.waitForTimeout(PAGE_WAIT); + + console.log('Experiment created') + + }) + + it('Simulate All conditions', async () => { + + await experiment_manager_page.waitForSelector(selectors.MODEL_BUTTON_SELECTOR) + await click(experiment_manager_page, selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await experiment_manager_page.waitForSelector(selectors.SIMULATE_NETWORK_SELECTOR) + await click(experiment_manager_page, selectors.SIMULATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + + console.log('Simulating all conditions') + await experiment_manager_page.waitForSelector(selectors.SIMULATE_POPUP_SELECTOR) + await experiment_manager_page.click(selectors.SIMULATE_POPUP_SELECTOR) + await experiment_manager_page.waitForSelector(selectors.CONFIRM_SIMULATE_SELECTOR) + await experiment_manager_page.click(selectors.CONFIRM_SIMULATE_SELECTOR) + + await experiment_manager_page.waitForTimeout(PAGE_WAIT); + + await experiment_manager_page.waitForSelector(selectors.CONFIRM_EXPERIMENT_STARTED_SELECTOR) + await experiment_manager_page.click(selectors.CONFIRM_EXPERIMENT_STARTED_SELECTOR) + + await experiment_manager_page.waitForSelector(selectors.SIMULATION_PAGE_SELECTOR, { timeout: TIMEOUT * 2 }); + await experiment_manager_page.waitForSelector(selectors.SIMULATION_LOADER_SELECTOR, { hidden: false, timeout: TIMEOUT * 5 }) + await experiment_manager_page.waitForSelector(selectors.SIMULATION_LOADER_SELECTOR, { hidden: true, timeout: TIMEOUT * 10 }) + console.log('Experiment Simulation finished') + + }); + + it('Check Experiment Condition #1', async () => { + + console.log('Checking experiment condition #1') + await experiment_manager_page.waitForSelector(selectors.BACK_TO_EDIT_SELECTOR) + await experiment_manager_page.click(selectors.BACK_TO_EDIT_SELECTOR) + + await experiment_manager_page.waitForTimeout(PAGE_WAIT * 2) + + await experiment_manager_page.waitForSelector(selectors.CELL_TYPES_TAB_SELECTOR) + await experiment_manager_page.click(selectors.CELL_TYPES_TAB_SELECTOR) + + await experiment_manager_page.evaluate(() => { + let sections = document.querySelectorAll('div[class="MuiButtonBase-root MuiListItem-root makeStyles-selected-23 MuiListItem-dense MuiListItem-button"]'); + for (var i = 0; i < sections.length; i++) { + sections[i].textContent.includes("Experiment Manager") && sections[i].click(); + } + }); + + await experiment_manager_page.waitForTimeout(PAGE_WAIT) + + + await experiment_manager_page.waitForSelector(selectors.EXPERIMENT_TABLE_SELECTOR) + await experiment_manager_page.click(selectors.CREATED_EXPERIMENT_SELECTOR) + + await experiment_manager_page.waitForSelector(selectors.EXPERIMENT_CONDIIONS_ROW_SELECTOR) + + await experiment_manager_page.evaluate(() => { + let results = document.querySelectorAll('button[title="Explore results"]'); + for (var i = 0; i < results.length; i++) { + results[0].innerHTML.includes("label") && results[0].click(); + } + }); + + await experiment_manager_page.waitForSelector(selectors.CONFIRM_SELECTOR) + await experiment_manager_page.click(selectors.CONFIRM_SELECTOR) + await experiment_manager_page.waitForTimeout(PAGE_WAIT) + + console.log('... taking snapshot ...'); + await experiment_manager_page.waitForTimeout(PAGE_WAIT); + expect(await experiment_manager_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Experiment Condition #1' + }); + + + }) + + + + it('Check Experiment Condition #2', async () => { + + console.log('Checking experiment condition #2') + + await experiment_manager_page.waitForTimeout(PAGE_WAIT) + await experiment_manager_page.click(selectors.BACK_TO_EDIT_SELECTOR) + + await experiment_manager_page.waitForTimeout(PAGE_WAIT * 3) + + await experiment_manager_page.evaluate(() => { + let results = document.querySelectorAll('button[title="Explore results"]'); + for (var i = 0; i < results.length; i++) { + results[1].innerHTML.includes("label") && results[1].click(); + } + }); + + await experiment_manager_page.waitForSelector(selectors.CONFIRM_SELECTOR) + await experiment_manager_page.click(selectors.CONFIRM_SELECTOR) + await experiment_manager_page.waitForTimeout(PAGE_WAIT) + + console.log('... taking snapshot ...'); + await experiment_manager_page.waitForTimeout(PAGE_WAIT); + expect(await experiment_manager_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Experiment Condition #2' + }); + + + }) + + it('Check Experiment Condition #3', async () => { + + console.log('Checking experiment condition #3') + + await experiment_manager_page.waitForTimeout(PAGE_WAIT) + await experiment_manager_page.waitForSelector(selectors.BACK_TO_EDIT_SELECTOR) + await experiment_manager_page.click(selectors.BACK_TO_EDIT_SELECTOR) + + await experiment_manager_page.waitForTimeout(PAGE_WAIT * 3) + + await experiment_manager_page.evaluate(() => { + let results = document.querySelectorAll('button[title="Explore results"]'); + for (var i = 0; i < results.length; i++) { + results[2].innerHTML.includes("label") && results[2].click(); + } + }); + + await experiment_manager_page.waitForSelector(selectors.CONFIRM_SELECTOR) + await experiment_manager_page.click(selectors.CONFIRM_SELECTOR) + await experiment_manager_page.waitForTimeout(PAGE_WAIT) + + console.log('... taking snapshot ...'); + await experiment_manager_page.waitForTimeout(PAGE_WAIT); + expect(await experiment_manager_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Experiment Condition #3' + }); + + + }) + + it('Delete Experiment', async () => { + + console.log('Deleting experiment') + + await experiment_manager_page.waitForTimeout(PAGE_WAIT) + await experiment_manager_page.waitForSelector(selectors.BACK_TO_EDIT_SELECTOR) + await experiment_manager_page.click(selectors.BACK_TO_EDIT_SELECTOR) + + await experiment_manager_page.waitForTimeout(PAGE_WAIT) + await experiment_manager_page.waitForSelector(selectors.EDIT_EXPERIMENT_BACK_SELECTOR) + await experiment_manager_page.click(selectors.EDIT_EXPERIMENT_BACK_SELECTOR) + + await experiment_manager_page.waitForTimeout(PAGE_WAIT) + + await experiment_manager_page.evaluate(() => { + let results = document.querySelectorAll('button[class="MuiButtonBase-root MuiButton-root MuiButton-text experimentIcon"]'); + for (var i = 0; i < results.length; i++) { + results[1].innerHTML.includes("label") && results[1].click(); + } + }); + + await experiment_manager_page.waitForSelector(selectors.CONFIRM_SELECTOR) + await experiment_manager_page.click(selectors.CONFIRM_SELECTOR) + + await experiment_manager_page.waitForFunction(() => !document.querySelector('tr[class="MuiTableRow-root"]')); + + }) + +}); \ No newline at end of file diff --git a/tests/frontend/e2e/tests/RxD.test.js b/tests/frontend/e2e/tests/RxD.test.js new file mode 100644 index 00000000..d0f5d834 --- /dev/null +++ b/tests/frontend/e2e/tests/RxD.test.js @@ -0,0 +1,388 @@ +//IMPORTS: +import 'expect-puppeteer'; +import puppeteer from 'puppeteer'; +import { toMatchImageSnapshot } from 'jest-image-snapshot' +expect.extend({ toMatchImageSnapshot }) +const path = require('path'); +var scriptName = path.basename(__filename, '.js'); +import * as selectors from './selectors' + + + + +//PAGE INFO: +const baseURL = process.env.url || 'https://test.netpyne.metacell.us/' +const PAGE_WAIT = 5000; +const TIMEOUT = 600000; + +//SNAPSHOT: +const SNAPSHOT_OPTIONS = { + customSnapshotsDir: `./tests/snapshots/${scriptName}`, + comparisonMethod: 'ssim', + customDiffConfig: { + ssim: 'fast', + }, + failureThresholdType: 'percent', + failureThreshold: 0.5 +}; + + +let r = (Math.random() + 1).toString(36).substring(2); + + +//USERS: +const USERNAME = `TestUser${r}` +const PASSWORD = 'testpassword' + + + +//TESTS: + +jest.setTimeout(900000); +let browser_RxD; +let RxD_page; + +describe('RxD testing', () => { + + beforeAll(async () => { + browser_RxD = await puppeteer.launch( + { + headless: 'new', + args: ['--no-sandbox', '--disable-setuid-sandbox'], + defaultViewport: { + width: 1300, + height: 1024 + }, + } + ); + RxD_page = await browser_RxD.newPage(); + await RxD_page.goto(baseURL); + if (baseURL.includes('test.netpyne.metacell.us')) { + console.log('Logging in as test user ...') + await RxD_page.waitForSelector(selectors.LOGIN_PAGE_SELECTOR); + await RxD_page.waitForSelector(selectors.USERNAME_SELECTOR) + await expect(RxD_page) + .toFill(selectors.USERNAME_SELECTOR, USERNAME, { timeout: TIMEOUT }); + + await RxD_page.waitForSelector(selectors.PASSWORD_SELECTOR) + await expect(RxD_page) + .toFill(selectors.PASSWORD_SELECTOR, PASSWORD, { timeout: TIMEOUT }); + + await RxD_page.click(selectors.LOGIN_BUTTON_SELECTOR) + // Wait for initial loading spinner to disappear + await RxD_page.waitForFunction(() => { + let el = document.querySelector('#loading-spinner'); + return el == null || el.clientHeight === 0; + }, { timeout: TIMEOUT }); + console.log('Logged in successfully') + } + }); + + afterAll(async () => { + // Close the browser instance after all tests have run + await browser_RxD.close(); + }); + + it('Open new page', async () => { + + console.log('Opening a new NetPyNE page ...') + + await RxD_page.on("dialog", dialog => + dialog.accept()); + + await RxD_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT * 6, visible: true }) + await RxD_page.waitForSelector(selectors.FILE_TAB_SELECTOR, { timeout: PAGE_WAIT * 3 }) + await RxD_page.waitForTimeout(PAGE_WAIT) + await RxD_page.click(selectors.FILE_TAB_SELECTOR) + await RxD_page.waitForSelector(selectors.NEW_FILE_SELECTOR, { timeout: PAGE_WAIT * 3 }) + await RxD_page.waitForTimeout(PAGE_WAIT) + await RxD_page.click(selectors.NEW_FILE_SELECTOR) + await RxD_page.waitForTimeout(PAGE_WAIT) + await RxD_page.waitForSelector(selectors.CONFIRM_NEW_PAGE_SELECTOR) + await RxD_page.click(selectors.CONFIRM_NEW_PAGE_SELECTOR) + await RxD_page.waitForTimeout(PAGE_WAIT * 3) + + await RxD_page.waitForFunction(() => { + let el = document.querySelector('#loading-spinner'); + return el == null || el.clientHeight === 0; + }, { timeout: TIMEOUT * 3 }); + + await RxD_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT * 10 }) + + console.log('Page opened successfully') + + }) + + it('Load Tutorial 3b', async () => { + + await RxD_page.waitForTimeout(PAGE_WAIT * 2) + await RxD_page.waitForSelector('#selectCellButton', { timeout: TIMEOUT }) + + console.log('Loading Tutorial #3b ...') + + await RxD_page.waitForTimeout(PAGE_WAIT) + await RxD_page.waitForSelector(selectors.TUTORIALS_BUTTON_SELECTOR, { timeout: TIMEOUT }) + await RxD_page.click(selectors.TUTORIALS_BUTTON_SELECTOR, { timeout: TIMEOUT }) + await RxD_page.waitForSelector(selectors.TUTORIAL_3B_SELECTOR, { timeout: TIMEOUT }) + await RxD_page.click(selectors.TUTORIAL_3B_SELECTOR, { timeout: TIMEOUT }) + await RxD_page.waitForSelector('#E', { timeout: TIMEOUT }) + await RxD_page.waitForSelector('#I', { timeout: TIMEOUT }) + await RxD_page.waitForTimeout(PAGE_WAIT) + + console.log('Tutorial loaded') + + }) + + it.skip('Create and Simulate Network', async () => { + + + await RxD_page.waitForSelector(selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }) + await RxD_page.click(selectors.MODEL_BUTTON_SELECTOR); + await RxD_page.waitForSelector(selectors.CREATE_NETWORK_SELECTOR, { timeout: TIMEOUT }) + await RxD_page.click(selectors.CREATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + + console.log('Creating network ...') + + await RxD_page.waitForTimeout(PAGE_WAIT * 3) + + await RxD_page.waitForSelector('div[title="3D Representation"][aria-disabled="false"]', { timeout: TIMEOUT * 3 }) + await RxD_page.waitForSelector(selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await RxD_page.click(selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await RxD_page.waitForSelector(selectors.SIMULATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + await RxD_page.click(selectors.SIMULATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + console.log('Simulating network ...') + + await RxD_page.waitForSelector('div[title="Raster plot"][aria-disabled="false"]', { timeout: TIMEOUT * 3 }) + await RxD_page.waitForSelector('div[title="RxD concentration plot"][aria-disabled="false"]', { timeout: TIMEOUT * 3 }) + + await RxD_page.waitForTimeout(PAGE_WAIT) + + console.log('Network created and simulated') + + }) + + it.skip('Check RxD Plot', async () => { + console.log('Opening the RxD plot ...') + + await RxD_page.waitForSelector('div[title="RxD concentration plot"][aria-disabled="false"]', { timeout: TIMEOUT * 3 }) + await RxD_page.click('div[title="RxD concentration plot"][aria-disabled="false"]') + await RxD_page.waitForFunction( + selector => document.querySelectorAll(selector).length === 2, + { timeout: TIMEOUT }, + 'div.flexlayout__tabset' + ); + + console.log('... taking snapshot ...'); + await RxD_page.waitForTimeout(PAGE_WAIT); + expect(await RxD_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'RxD Plot' + }); + await RxD_page.waitForTimeout(PAGE_WAIT); + console.log('Plot displayed') + }) + it.skip('Check LFP Time Series Plot', async () => { + console.log('Opening the LFP TS plot ...') + + await RxD_page.waitForSelector('div[title="LFP Time Series Plot"][aria-disabled="false"]', { timeout: TIMEOUT * 3 }) + await RxD_page.click('div[title="LFP Time Series Plot"][aria-disabled="false"]') + await RxD_page.waitForFunction( + selector => document.querySelectorAll(selector).length === 2, + { timeout: TIMEOUT }, + 'div.flexlayout__tabset' + ); + + console.log('... taking snapshot ...'); + await RxD_page.waitForTimeout(PAGE_WAIT); + expect(await RxD_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'LFP Time Series Plot Before change' + }); + await RxD_page.waitForTimeout(PAGE_WAIT); + console.log('Plot displayed') + }) + it.skip('Check LFP PSD Plot', async () => { + console.log('Opening the LFP PSD plot ...') + + await RxD_page.waitForSelector('div[title="LFP PSD Plot"][aria-disabled="false"]', { timeout: TIMEOUT * 3 }) + await RxD_page.click('div[title="LFP PSD Plot"][aria-disabled="false"]') + await RxD_page.waitForFunction( + selector => document.querySelectorAll(selector).length === 2, + { timeout: TIMEOUT }, + 'div.flexlayout__tabset' + ); + + console.log('... taking snapshot ...'); + await RxD_page.waitForTimeout(PAGE_WAIT); + expect(await RxD_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'LFP PSD Plot Before change' + }); + await RxD_page.waitForTimeout(PAGE_WAIT); + console.log('Plot displayed') + + }) + + it.skip('Go back to Edit', async () => { + + console.log('Going back to Edit ...') + await RxD_page.waitForSelector('.MuiButtonBase-root.MuiButton-root.MuiButton-contained') + await RxD_page.evaluate(() => { + [...document.querySelectorAll('.MuiButtonBase-root.MuiButton-root.MuiButton-contained')].find(element => element.innerText === "BACK TO EDIT").click(); + }); + await RxD_page.waitForSelector('#E') + await RxD_page.waitForSelector('#I') + console.log('Edit mode displayed') + + }) + + it('Open RxD Tab ', async () => { + + console.log('Opening RxD tab ...') + await RxD_page.waitForSelector('div[title="Reaction-Diffusion"]') + await RxD_page.click('div[title="Reaction-Diffusion"]') + + await RxD_page.waitForSelector('#simple-tabpanel-0') + + console.log('RxD Tab Opened') + + }) + + it('Change RxD Configuration', async () => { + console.log('Opening RxD config ...') + + await RxD_page.waitForSelector('#simple-tabpanel-1') + await RxD_page.click('#simple-tab-1') + + await RxD_page.waitForSelector('button[aria-selected="true"][id = "simple-tab-1"]') + + await RxD_page.waitForSelector('#ip3') + console.log('Species tab opened') + await RxD_page.waitForTimeout(PAGE_WAIT) + + }) + + it('Increase IP3 species concentration', async () => { + + console.log('Increasing IP3 concentration ...') + + await RxD_page.waitForSelector('#ip3') + await RxD_page.click('#ip3') + await RxD_page.waitForTimeout(PAGE_WAIT) + await RxD_page.waitForSelector('#netParamsrxdParamsspeciesip3regions') + await RxD_page.waitForSelector('#netParamsrxdParamsspeciesip3d') + await RxD_page.waitForSelector('#netParamsrxdParamsspeciesip3charge') + await RxD_page.waitForSelector('#netParamsrxdParamsspeciesip3initial') + await RxD_page.waitForTimeout(PAGE_WAIT) + await RxD_page.click('#netParamsrxdParamsspeciesip3initial') + await RxD_page.keyboard.press('Backspace'); + await RxD_page.keyboard.press('Backspace'); + await RxD_page.keyboard.press('Backspace'); + await RxD_page.type('#netParamsrxdParamsspeciesip3initial', '2') + await RxD_page.waitForTimeout(PAGE_WAIT) + await RxD_page.click('#netParamsrxdParamsspeciesip3charge') + await RxD_page.waitForTimeout(PAGE_WAIT) + await RxD_page.waitForSelector('#netParamsrxdParamsspeciesip3initial[value = "2"]') + + console.log('IP3 increased') + + }) + + + it('Create and Simulate Network', async () => { + + await RxD_page.waitForSelector(selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }) + await RxD_page.click(selectors.MODEL_BUTTON_SELECTOR); + await RxD_page.waitForSelector(selectors.CREATE_NETWORK_SELECTOR, { timeout: TIMEOUT }) + await RxD_page.click(selectors.CREATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + + console.log('Creating network ...') + + await RxD_page.waitForTimeout(PAGE_WAIT * 3) + + await RxD_page.waitForSelector('div[title="3D Representation"][aria-disabled="false"]', { timeout: TIMEOUT * 3 }) + await RxD_page.waitForSelector(selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await RxD_page.click(selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await RxD_page.waitForSelector(selectors.SIMULATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + await RxD_page.click(selectors.SIMULATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + console.log('Simulating network ...') + + await RxD_page.waitForSelector('div[title="Raster plot"][aria-disabled="false"]', { timeout: TIMEOUT * 3 }) + await RxD_page.waitForSelector('div[title="RxD concentration plot"][aria-disabled="false"]', { timeout: TIMEOUT * 3 }) + + await RxD_page.waitForTimeout(PAGE_WAIT) + }) + + it('Check RxD Plot', async () => { + + console.log('Opening the RxD plot ...') + + await RxD_page.waitForSelector('div[title="RxD concentration plot"][aria-disabled="false"]', { timeout: TIMEOUT * 3 }) + await RxD_page.click('div[title="RxD concentration plot"][aria-disabled="false"]') + await RxD_page.waitForFunction( + selector => document.querySelectorAll(selector).length === 2, + { timeout: TIMEOUT }, + 'div.flexlayout__tabset' + ); + + console.log('... taking snapshot ...'); + await RxD_page.waitForTimeout(PAGE_WAIT); + expect(await RxD_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'RxD Plot' + }); + await RxD_page.waitForTimeout(PAGE_WAIT); + console.log('Plot displayed') + }) + it('Check LFP Time Series Plot', async () => { + + console.log('Opening the LFP TS plot ...') + + await RxD_page.waitForSelector('div[title="LFP Time Series Plot"][aria-disabled="false"]', { timeout: TIMEOUT * 3 }) + await RxD_page.click('div[title="LFP Time Series Plot"][aria-disabled="false"]') + await RxD_page.waitForFunction( + selector => document.querySelectorAll(selector).length === 2, + { timeout: TIMEOUT }, + 'div.flexlayout__tabset' + ); + + console.log('... taking snapshot ...'); + await RxD_page.waitForTimeout(PAGE_WAIT); + expect(await RxD_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'LFP Time Series Plot After change' + }); + await RxD_page.waitForTimeout(PAGE_WAIT); + console.log('Plot displayed') + }) + it('Check LFP PSD Plot', async () => { + + console.log('Opening the LFP PSD plot ...') + + await RxD_page.waitForSelector('div[title="LFP PSD Plot"][aria-disabled="false"]', { timeout: TIMEOUT * 3 }) + await RxD_page.click('div[title="LFP PSD Plot"][aria-disabled="false"]') + await RxD_page.waitForFunction( + selector => document.querySelectorAll(selector).length === 2, + { timeout: TIMEOUT }, + 'div.flexlayout__tabset' + ); + + console.log('... taking snapshot ...'); + await RxD_page.waitForTimeout(PAGE_WAIT); + expect(await RxD_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'LFP PSD Plot After change' + }); + await RxD_page.waitForTimeout(PAGE_WAIT); + console.log('Plot displayed') + + }) + + +}) \ No newline at end of file diff --git a/tests/frontend/e2e/tests/SaveOpenFile.test.js b/tests/frontend/e2e/tests/SaveOpenFile.test.js new file mode 100644 index 00000000..bc0d4633 --- /dev/null +++ b/tests/frontend/e2e/tests/SaveOpenFile.test.js @@ -0,0 +1,585 @@ +//IMPORTS: +import 'expect-puppeteer'; +import puppeteer from 'puppeteer'; +import { toMatchImageSnapshot } from 'jest-image-snapshot' +expect.extend({ toMatchImageSnapshot }) +const path = require('path'); +var scriptName = path.basename(__filename, '.js'); +import * as selectors from './selectors' + + +//PAGE INFO: +const baseURL = process.env.url || 'https://test.netpyne.metacell.us/' +const PAGE_WAIT = 3000; +const TIMEOUT = 60000; + +//SNAPSHOT: +const SNAPSHOT_OPTIONS = { + customSnapshotsDir: `./tests/snapshots/${scriptName}`, + comparisonMethod: 'ssim', + customDiffConfig: { + ssim: 'fast', + }, + failureThresholdType: 'percent', + failureThreshold: 0.2 +}; + + +let r = (Math.random() + 1).toString(36).substring(2); + +const EDITED_MODEL = + '{"E2": {"cellType": "E", "numCells": 5, "yRange": [100, 300]}, "E4": {"cellType": "E", "numCells": 5, "yRange": [300, 600]}, "E5": {"cellType": "E", "numCells": 5, "ynormRange": [0.6, 1]}, "I2": {"cellType": "I", "numCells": 5, "yRange": [100, 300]}, "I4": {"cellType": "I", "numCells": 5, "yRange": [300, 600]}, "I5": {"cellType": "I", "numCells": 5, "ynormRange": [0.6, 1]}}' + + +//USERS: +const USERNAME = `TestUser${r}` +const PASSWORD = 'testpassword' + + +//TESTS: + +jest.setTimeout(300000); +let SaveOpen_File_browser; +let SaveOpen_File_page; + + +describe.skip('Save / Open File testing', () => { + + beforeAll(async () => { + SaveOpen_File_browser = await puppeteer.launch( + { + headless: 'new', + args: ['--no-sandbox', '--disable-setuid-sandbox'], + defaultViewport: { + width: 1300, + height: 1024 + }, + } + ); + SaveOpen_File_page = await SaveOpen_File_browser.newPage(); + await SaveOpen_File_page.goto(baseURL); + if (baseURL.includes('test.netpyne.metacell.us')) { + console.log('Logging in as test user ...') + await SaveOpen_File_page.waitForSelector(selectors.LOGIN_PAGE_SELECTOR); + await SaveOpen_File_page.waitForSelector(selectors.USERNAME_SELECTOR) + await expect(SaveOpen_File_page) + .toFill(selectors.USERNAME_SELECTOR, USERNAME, { timeout: TIMEOUT }); + + await SaveOpen_File_page.waitForSelector(selectors.PASSWORD_SELECTOR) + await expect(SaveOpen_File_page) + .toFill(selectors.PASSWORD_SELECTOR, PASSWORD, { timeout: TIMEOUT }); + + await SaveOpen_File_page.click(selectors.LOGIN_BUTTON_SELECTOR) + // Wait for initial loading spinner to disappear + await SaveOpen_File_page.waitForFunction(() => { + let el = document.querySelector('#loading-spinner'); + return el == null || el.clientHeight === 0; + }, { timeout: TIMEOUT }); + console.log('Logged in successfully') + } + }); + + afterAll(async () => { + // Close the browser instance after all tests have run + await SaveOpen_File_browser.close(); + }); + + it('Open new page', async () => { + + console.log('Opening a new NetPyNE page') + + await SaveOpen_File_page.on("dialog", dialog => + dialog.accept()); + + await SaveOpen_File_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT * 6, visible: true }) + await SaveOpen_File_page.waitForSelector(selectors.FILE_TAB_SELECTOR, { timeout: PAGE_WAIT * 3 }) + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT) + await SaveOpen_File_page.click(selectors.FILE_TAB_SELECTOR) + await SaveOpen_File_page.waitForSelector(selectors.NEW_FILE_SELECTOR, { timeout: PAGE_WAIT * 3 }) + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT) + await SaveOpen_File_page.click(selectors.NEW_FILE_SELECTOR) + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT) + await SaveOpen_File_page.waitForSelector(selectors.CONFIRM_NEW_PAGE_SELECTOR) + await SaveOpen_File_page.click(selectors.CONFIRM_NEW_PAGE_SELECTOR) + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT * 3) + + await SaveOpen_File_page.waitForFunction(() => { + let el = document.querySelector('#loading-spinner'); + return el == null || el.clientHeight === 0; + }, { timeout: TIMEOUT * 3 }); + + await SaveOpen_File_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT * 10 }) + + console.log('Page opened successfully') + + }) + + it('Open model from File > Open', async () => { + console.log('Opening model from File') + + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT * 2) + await SaveOpen_File_page.waitForSelector(selectors.FILE_TAB_SELECTOR) + await SaveOpen_File_page.click(selectors.FILE_TAB_SELECTOR) + await SaveOpen_File_page.waitForSelector(selectors.NEW_FILE_SELECTOR, { timeout: PAGE_WAIT * 3 }) + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT) + + await SaveOpen_File_page.evaluate(async () => { + document.getElementById("Open...").click(); + }) + + await SaveOpen_File_page.waitForSelector(selectors.FILE_SYSTEM_SELECTOR) + await SaveOpen_File_page.click(selectors.LEVEL_UP_SELECTOR) + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT) + await SaveOpen_File_page.waitForSelector(selectors.FOLDERS_SELECTOR) + + const folder_num = await SaveOpen_File_page.$$(selectors.FOLDERS_SELECTOR) + + await SaveOpen_File_page.evaluate(() => { + [...document.querySelectorAll('div[class = "rst__rowContents rst__rowContentsDragDisabled"]')].find(element => element.textContent === 'src').click(); + }); + + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT) + + const folder_num_src = await SaveOpen_File_page.$$(selectors.FOLDERS_SELECTOR) + + expect(folder_num_src.length).toBeGreaterThan(folder_num.length) + + await SaveOpen_File_page.evaluate(() => { + [...document.querySelectorAll('div[class = "rst__rowContents rst__rowContentsDragDisabled"]')].find(element => element.textContent === 'netpyne').click(); + }); + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT) + + const folder_num_netpyne = await SaveOpen_File_page.$$(selectors.FOLDERS_SELECTOR) + expect(folder_num_netpyne.length).toBeGreaterThan(folder_num_src.length) + + await SaveOpen_File_page.evaluate(() => { + [...document.querySelectorAll('div[class = "rst__rowContents rst__rowContentsDragDisabled"]')].find(element => element.textContent === 'examples').scrollIntoView(); + }); + + await SaveOpen_File_page.evaluate(() => { + [...document.querySelectorAll('div[class = "rst__rowContents rst__rowContentsDragDisabled"]')].find(element => element.textContent === 'examples').click(); + }); + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT * 2) + + + await SaveOpen_File_page.evaluate(() => { + [...document.querySelectorAll('div[class = "rst__rowContents rst__rowContentsDragDisabled"]')].find(element => element.textContent === 'HybridTut').scrollIntoView(); + }); + await SaveOpen_File_page.evaluate(() => { + [...document.querySelectorAll('div[class = "rst__rowContents rst__rowContentsDragDisabled"]')].find(element => element.textContent === 'netClamp').click(); + }); + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT * 2) + + const folder_num_netClamp = await SaveOpen_File_page.$$(selectors.FOLDERS_SELECTOR) + expect(folder_num_netClamp.length).toBeGreaterThan(folder_num_netpyne.length) + + await SaveOpen_File_page.click(selectors.SELECT_BUTTON_SELECTOR) + + await SaveOpen_File_page.waitForSelector(selectors.E_RULE_SELECTOR) + + console.log('Model Loaded') + + }) + + it('Create and Simulate opened model', async () => { + console.log('Instantiating and Simulating model...') + + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT) + + await SaveOpen_File_page.waitForSelector(selectors.NETWORK_CREATION_MENU_BUTTON_SELECTOR) + await SaveOpen_File_page.click(selectors.NETWORK_CREATION_MENU_BUTTON_SELECTOR) + + await SaveOpen_File_page.waitForSelector(selectors.NETWORK_CREATION_MENU_ITEMS_SELECTOR) + await SaveOpen_File_page.evaluate(() => { + [...document.querySelectorAll('#split-button-menu > li')].find(element => element.innerText === 'CREATE AND SIMULATE').click(); + }); + + await SaveOpen_File_page.waitForSelector(selectors.NETWORK_CREATION_BUTTON_SELECTOR) + await SaveOpen_File_page.click(selectors.NETWORK_CREATION_BUTTON_SELECTOR) + + await SaveOpen_File_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT * 2 }); + + await SaveOpen_File_page.waitForSelector(selectors.RASTER_PLOT_SELECTOR, { timeout: TIMEOUT * 3 }) + + console.log('... taking snapshot ...'); + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT) + expect(await SaveOpen_File_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'NetClamp Model' + }); + console.log('Model Simulated') + }) + + it('Change the instantiated model', async () => { + console.log('Editing model ...') + + await SaveOpen_File_page.evaluate(() => { + [...document.querySelectorAll('button[class = "MuiButtonBase-root MuiButton-root MuiButton-contained"]')].find(element => element.innerText === 'BACK TO EDIT').click(); + }); + await SaveOpen_File_page.waitForSelector(selectors.POPULATIONS_TAB_SELECTOR) + await SaveOpen_File_page.click(selectors.POPULATIONS_TAB_SELECTOR) + await SaveOpen_File_page.waitForSelector('#E2') + + await SaveOpen_File_page.click('#E2') + await SaveOpen_File_page.waitForSelector('#netParamspopParamsE2numCells') + expect(SaveOpen_File_page).toFill('#netParamspopParamsE2numCells', '5') + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT * 2) + + await SaveOpen_File_page.click('#I2') + await SaveOpen_File_page.waitForSelector('#netParamspopParamsI2numCells') + expect(SaveOpen_File_page).toFill('#netParamspopParamsI2numCells', '5') + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT * 2) + + await SaveOpen_File_page.click('#E4') + await SaveOpen_File_page.waitForSelector('#netParamspopParamsE4numCells') + expect(SaveOpen_File_page).toFill('#netParamspopParamsE4numCells', '5') + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT * 2) + + await SaveOpen_File_page.click('#I4') + await SaveOpen_File_page.waitForSelector('#netParamspopParamsI4numCells') + expect(SaveOpen_File_page).toFill('#netParamspopParamsI4numCells', '5') + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT * 2) + + await SaveOpen_File_page.click('#E5') + await SaveOpen_File_page.waitForSelector('#netParamspopParamsE5numCells') + expect(SaveOpen_File_page).toFill('#netParamspopParamsE5numCells', '5') + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT * 2) + + await SaveOpen_File_page.click('#I5') + await SaveOpen_File_page.waitForSelector('#netParamspopParamsI5numCells') + expect(SaveOpen_File_page).toFill('#netParamspopParamsI5numCells', '5') + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT * 2) + + await SaveOpen_File_page.waitForSelector(selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await SaveOpen_File_page.click(selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await SaveOpen_File_page.waitForSelector(selectors.CREATE_AND_SIMULATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + await SaveOpen_File_page.click(selectors.CREATE_AND_SIMULATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + + await SaveOpen_File_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT * 2 }); + + await SaveOpen_File_page.waitForSelector(selectors.RASTER_PLOT_SELECTOR, { timeout: TIMEOUT * 3 }) + + console.log('... taking snapshot ...'); + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT) + expect(await SaveOpen_File_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Edited NetClamp Model' + }); + + console.log('Model updated') + }) + + it('Save model', async () => { + console.log('Saving model ...') + await SaveOpen_File_page.waitForSelector(selectors.FILE_TAB_SELECTOR) + await SaveOpen_File_page.click(selectors.FILE_TAB_SELECTOR) + await SaveOpen_File_page.waitForSelector(selectors.NEW_FILE_SELECTOR, { timeout: PAGE_WAIT * 3 }) + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT) + await SaveOpen_File_page.evaluate(async () => { + document.getElementById("Save...").click(); + }) + await SaveOpen_File_page.waitForSelector(selectors.SAVE_MENU_SELECTOR) + + // const inputValue = await page.$eval(selectors.PATH_INPUT_SELECTOR, el => el.value); + await SaveOpen_File_page.click(selectors.PATH_INPUT_SELECTOR, { clickCount: 3 }); + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT) + expect(SaveOpen_File_page).toFill(selectors.PATH_INPUT_SELECTOR, 'aut_test') + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT * 2) + await SaveOpen_File_page.click(selectors.SAVE_BUTTON_SELECTOR) + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT) + + console.log('Model saved as default') + }) + + it('Save model - NetParams', async () => { + console.log('Saving model with NetParams as Python ...') + + await SaveOpen_File_page.click(selectors.FILE_TAB_SELECTOR) + await SaveOpen_File_page.waitForSelector(selectors.NEW_FILE_SELECTOR, { timeout: PAGE_WAIT * 3 }) + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT) + await SaveOpen_File_page.evaluate(async () => { + document.getElementById("Save...").click(); + }) + await SaveOpen_File_page.waitForSelector(selectors.SAVE_MENU_SELECTOR) + + // const inputValue = await page.$eval(selectors.PATH_INPUT_SELECTOR, el => el.value); + // for (let i = 0; i < inputValue.length; i++) { + // await page.keyboard.press('Backspace'); + // } + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT) + + expect(SaveOpen_File_page).toFill(selectors.PATH_INPUT_SELECTOR, 'aut_test_net_params') + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT) + + await SaveOpen_File_page.evaluate(() => { + [...document.querySelectorAll('.MuiAccordionSummary-content')].find(element => element.innerText === "Advanced Options").click(); + }); + + await SaveOpen_File_page.waitForSelector(selectors.EXPORT_OPTIONS_SELECTOR) + await SaveOpen_File_page.waitForSelector(selectors.CHECKBOX_OPTION_SELECTOR) + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT) + + const checkbox_buttons = await SaveOpen_File_page.$$(selectors.CHECKBOX_OPTION_SELECTOR) + + await checkbox_buttons[0].click() + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT) + + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT) + await SaveOpen_File_page.click(selectors.SAVE_BUTTON_SELECTOR) + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT) + + console.log('Model saved with NetParams as Python') + + }) + + it('Save model - SimConfig', async () => { + console.log('Saving model with SimConfig as Python ...') + + await SaveOpen_File_page.click(selectors.FILE_TAB_SELECTOR) + await SaveOpen_File_page.waitForSelector(selectors.NEW_FILE_SELECTOR, { timeout: PAGE_WAIT * 3 }) + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT) + await SaveOpen_File_page.evaluate(async () => { + document.getElementById("Save...").click(); + }) + await SaveOpen_File_page.waitForSelector(selectors.SAVE_MENU_SELECTOR) + + const inputValue = await SaveOpen_File_page.$eval(selectors.PATH_INPUT_SELECTOR, el => el.value); + for (let i = 0; i < inputValue.length; i++) { + await SaveOpen_File_page.keyboard.press('Backspace'); + } + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT) + + expect(SaveOpen_File_page).toFill(selectors.PATH_INPUT_SELECTOR, 'aut_test_sim_config') + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT * 2) + + await SaveOpen_File_page.evaluate(() => { + [...document.querySelectorAll('.MuiAccordionSummary-content')].find(element => element.innerText === "Advanced Options").click(); + }); + + await SaveOpen_File_page.waitForSelector(selectors.EXPORT_OPTIONS_SELECTOR) + await SaveOpen_File_page.waitForSelector(selectors.CHECKBOX_OPTION_SELECTOR) + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT) + + const checkbox_buttons = await SaveOpen_File_page.$$(selectors.CHECKBOX_OPTION_SELECTOR) + await checkbox_buttons[1].click() + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT) + + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT * 3) + await SaveOpen_File_page.click(selectors.SAVE_BUTTON_SELECTOR) + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT) + console.log('Model saved with SimConfig as Python') + + }) + + it('Check default Saved Model', async () => { + console.log('Checking default saved model ...') + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT * 2) + await SaveOpen_File_page.waitForSelector(selectors.PYTHON_CONSOLE_TAB_SELECTOR) + + await SaveOpen_File_page.click(selectors.PYTHON_CONSOLE_TAB_SELECTOR) + await SaveOpen_File_page.waitForSelector(selectors.PYTHON_CONSLE_SELECTOR) + + const elementHandle = await SaveOpen_File_page.waitForSelector( + selectors.PYTHON_CONSOLE_FRAME_SELECTOR + ); + + const python_frame = await elementHandle.contentFrame(); + + await python_frame.waitForSelector(selectors.MAIN_PYTHON_APP_SELECTOR) + + await python_frame.waitForSelector(selectors.PYTHON_CELL_SELECTOR) + const line = await python_frame.$(selectors.PYTHON_CELL_SELECTOR) + await line.click() + await line.type('pwd') + + await SaveOpen_File_page.keyboard.down('Shift'); + await SaveOpen_File_page.keyboard.press('Enter'); + await SaveOpen_File_page.keyboard.up('Shift'); + + await python_frame.waitForSelector(selectors.PYTHON_FIRST_OUTPUT_SELECTOR) + + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT * 3) + + const first_code_output = await python_frame.$$eval(selectors.PYTHON_FIRST_OUTPUT_SELECTOR, pwd_code_outputs => { + return pwd_code_outputs.map(pwd_code_output => pwd_code_output.innerText) + }) + + expect(first_code_output[0]).toBe("'/opt/workspace/workspace'") + + const code_lines = await python_frame.$$(selectors.PYTHON_CELL_SELECTOR) + + await code_lines[1].type('cd uploads/aut_test/src') + + await SaveOpen_File_page.keyboard.down('Shift'); + await SaveOpen_File_page.keyboard.press('Enter'); + await SaveOpen_File_page.keyboard.up('Shift'); + + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT * 3) + + const second_code_output = await python_frame.$$eval(selectors.PYTHON_OUTPUT_SELECTOR, cd_code_outputs => { + return cd_code_outputs.map(cd_code_output => cd_code_output.innerText) + }) + + expect(second_code_output[0]).toBe("/opt/workspace/workspace/saved_models/aut_test/src\n") + + const ls_code_lines = await python_frame.$$(selectors.PYTHON_CELL_SELECTOR) + + await ls_code_lines[2].type('ls -l') + + await SaveOpen_File_page.keyboard.down('Shift'); + await SaveOpen_File_page.keyboard.press('Enter'); + await SaveOpen_File_page.keyboard.up('Shift'); + + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT * 3) + + const third_code_output = await python_frame.$$eval(selectors.PYTHON_OUTPUT_SELECTOR, ls_code_outputs => { + return ls_code_outputs.map(ls_code_output => ls_code_output.innerText) + }) + + expect(third_code_output[1]).toContain("cfg.json") + expect(third_code_output[1]).toContain("netParams.json") + + console.log('Model saved correctly') + + }) + + it('Check netParams.py Saved Model', async () => { + console.log('Checking netParams.py saved model ...') + + await SaveOpen_File_page.waitForSelector(selectors.PYTHON_CONSLE_SELECTOR) + + const elementHandle = await SaveOpen_File_page.waitForSelector( + selectors.PYTHON_CONSOLE_FRAME_SELECTOR + ); + + const python_frame = await elementHandle.contentFrame(); + + await python_frame.waitForSelector(selectors.MAIN_PYTHON_APP_SELECTOR) + + const cd_code_lines = await python_frame.$$(selectors.PYTHON_CELL_SELECTOR) + + await cd_code_lines[2].type('cd ../../') + + await SaveOpen_File_page.keyboard.down('Shift'); + await SaveOpen_File_page.keyboard.press('Enter'); + await SaveOpen_File_page.keyboard.up('Shift'); + + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT * 3) + + const net_code_lines = await python_frame.$$(selectors.PYTHON_CELL_SELECTOR) + + await net_code_lines[3].type('cd aut_test_net_params/src') + await SaveOpen_File_page.keyboard.down('Shift'); + await SaveOpen_File_page.keyboard.press('Enter'); + await SaveOpen_File_page.keyboard.up('Shift'); + + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT * 3) + + const ls_code_lines = await python_frame.$$(selectors.PYTHON_CELL_SELECTOR) + + await ls_code_lines[4].type('ls -l') + + await SaveOpen_File_page.keyboard.down('Shift'); + await SaveOpen_File_page.keyboard.press('Enter'); + await SaveOpen_File_page.keyboard.up('Shift'); + + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT * 3) + + const netParam_code_output = await python_frame.$$eval(selectors.PYTHON_OUTPUT_SELECTOR, np_code_outputs => { + return np_code_outputs.map(np_code_output => np_code_output.innerText) + }) + + expect(netParam_code_output[4]).toContain("cfg.json") + expect(netParam_code_output[4]).toContain("netParams.py") + + console.log('Model saved correctly') + }) + + it('Check cfg.py Saved Model', async () => { + console.log('Checking cfg.py saved model ...') + + await SaveOpen_File_page.waitForSelector(selectors.PYTHON_CONSLE_SELECTOR) + + const elementHandle = await SaveOpen_File_page.waitForSelector( + selectors.PYTHON_CONSOLE_FRAME_SELECTOR + ); + + const python_frame = await elementHandle.contentFrame(); + + await python_frame.waitForSelector(selectors.MAIN_PYTHON_APP_SELECTOR) + + const cd_code_lines = await python_frame.$$(selectors.PYTHON_CELL_SELECTOR) + + await cd_code_lines[5].type('cd ../../') + + await SaveOpen_File_page.keyboard.down('Shift'); + await SaveOpen_File_page.keyboard.press('Enter'); + await SaveOpen_File_page.keyboard.up('Shift'); + + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT * 3) + + const net_code_lines = await python_frame.$$(selectors.PYTHON_CELL_SELECTOR) + + await net_code_lines[6].type('cd aut_test_sim_config/src') + await SaveOpen_File_page.keyboard.down('Shift'); + await SaveOpen_File_page.keyboard.press('Enter'); + await SaveOpen_File_page.keyboard.up('Shift'); + + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT * 3) + + const ls_code_lines = await python_frame.$$(selectors.PYTHON_CELL_SELECTOR) + + await ls_code_lines[7].type('ls -l') + + await SaveOpen_File_page.keyboard.down('Shift'); + await SaveOpen_File_page.keyboard.press('Enter'); + await SaveOpen_File_page.keyboard.up('Shift'); + + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT * 3) + + const simConfig_code_output = await python_frame.$$eval(selectors.PYTHON_OUTPUT_SELECTOR, sc_code_outputs => { + return sc_code_outputs.map(sc_code_output => sc_code_output.innerText) + }) + + expect(simConfig_code_output[7]).toContain("cfg.py") + expect(simConfig_code_output[7]).toContain("netParams.json") + console.log('Model saved correctly') + + }) + + it('Check the edited Populations of the Saved Model', async () => { + + console.log('Checking the edited Populations of the saved model ...') + + await SaveOpen_File_page.waitForSelector(selectors.PYTHON_CONSLE_SELECTOR) + + const elementHandle = await SaveOpen_File_page.waitForSelector( + selectors.PYTHON_CONSOLE_FRAME_SELECTOR + ); + + const python_frame = await elementHandle.contentFrame(); + + await python_frame.waitForSelector(selectors.MAIN_PYTHON_APP_SELECTOR) + + const code_lines = await python_frame.$$(selectors.PYTHON_CELL_SELECTOR) + + await code_lines[8].type('cat netParams.json ') + + await SaveOpen_File_page.keyboard.down('Shift'); + await SaveOpen_File_page.keyboard.press('Enter'); + await SaveOpen_File_page.keyboard.up('Shift'); + + await SaveOpen_File_page.waitForTimeout(PAGE_WAIT * 3) + + const cat_code_output = await python_frame.$$eval(selectors.PYTHON_OUTPUT_SELECTOR, cat_code_outputs => { + return cat_code_outputs.map(cat_code_output => cat_code_output.innerText) + }) + + var obj = JSON.parse(cat_code_output[8]) + + expect(obj.net.params.popParams).toEqual(JSON.parse(EDITED_MODEL)) + + }) +}) \ No newline at end of file diff --git a/tests/frontend/e2e/tests/TestTutorial1.js b/tests/frontend/e2e/tests/TestTutorial1.js index eac93af8..eb809a75 100644 --- a/tests/frontend/e2e/tests/TestTutorial1.js +++ b/tests/frontend/e2e/tests/TestTutorial1.js @@ -20,7 +20,7 @@ beforeAll(async () => { await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'); }); -describe('Tutorial #1', () => { +describe.skip('Tutorial #1', () => { beforeAll(async () => { await page.waitForSelector('.NetPyNE-root-1'); diff --git a/tests/frontend/e2e/tests/Tut#1_smoke.test.js b/tests/frontend/e2e/tests/Tut#1_smoke.test.js new file mode 100644 index 00000000..c0e0f8ef --- /dev/null +++ b/tests/frontend/e2e/tests/Tut#1_smoke.test.js @@ -0,0 +1,282 @@ +//IMPORTS: +import 'expect-puppeteer'; +import puppeteer from 'puppeteer'; +import { click } from './utils'; +// import { expect } from 'expect-puppeteer'; +import { toMatchImageSnapshot } from 'jest-image-snapshot' +expect.extend({ toMatchImageSnapshot }) + +const path = require('path'); +var scriptName = path.basename(__filename, '.js'); +import * as selectors from './selectors' + + + +//PAGE INFO: +const baseURL = process.env.url || 'https://test.netpyne.metacell.us/' +const PAGE_WAIT = 3000; +const TIMEOUT = 60000; + +//SNAPSHOT: +const SNAPSHOT_OPTIONS = { + customSnapshotsDir: `./tests/snapshots/${scriptName}`, + comparisonMethod: 'ssim', + failureThresholdType: 'percent', + failureThreshold: 0.5 +}; + + +let r = (Math.random() + 1).toString(36).substring(2); + +//USERS: +const USERNAME = `TestUser${r}` +const PASSWORD = 'testpassword' + +//TESTS: + +jest.setTimeout(3000000); +let browser; +let tutorial_1_page; + +describe('Tutorial #1 for Smoke Testing', () => { + + beforeAll(async () => { + browser = await puppeteer.launch( + { + headless: 'new', + args: ['--no-sandbox', '--disable-setuid-sandbox'], + defaultViewport: { + width: 1300, + height: 1024 + }, + } + ); + tutorial_1_page = await browser.newPage(); + await tutorial_1_page.goto(baseURL); + + await tutorial_1_page.goto(baseURL); + if (baseURL.includes('test.netpyne.metacell.us')) { + console.log('Logging in as test user ...') + await tutorial_1_page.waitForSelector(selectors.LOGIN_PAGE_SELECTOR); + await tutorial_1_page.waitForSelector(selectors.USERNAME_SELECTOR) + await expect(tutorial_1_page) + .toFill(selectors.USERNAME_SELECTOR, USERNAME, { timeout: TIMEOUT }); + + await tutorial_1_page.waitForSelector(selectors.PASSWORD_SELECTOR) + await expect(tutorial_1_page) + .toFill(selectors.PASSWORD_SELECTOR, PASSWORD, { timeout: TIMEOUT }); + + await tutorial_1_page.waitForSelector(selectors.LOGIN_BUTTON_SELECTOR) + await tutorial_1_page.click(selectors.LOGIN_BUTTON_SELECTOR) + // Wait for initial loading spinner to disappear + await tutorial_1_page.waitForFunction(() => { + let el = document.querySelector('#loading-spinner'); + return el == null || el.clientHeight === 0; + }, { timeout: TIMEOUT }); + console.log('Logged in successfully') + } + }); + + afterAll(async () => { + // Close the browser instance after all tests have run + await browser.close(); + }); + + it('Open new page', async () => { + + console.log('Opening a new NetPyNE page') + + await tutorial_1_page.on("dialog", dialog => + dialog.accept()); + + await tutorial_1_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT * 6, visible: true }) + await tutorial_1_page.waitForSelector(selectors.FILE_TAB_SELECTOR, { timeout: PAGE_WAIT * 3 }) + await tutorial_1_page.waitForTimeout(PAGE_WAIT) + await tutorial_1_page.click(selectors.FILE_TAB_SELECTOR) + await tutorial_1_page.waitForSelector(selectors.NEW_FILE_SELECTOR, { timeout: PAGE_WAIT * 3 }) + await tutorial_1_page.waitForTimeout(PAGE_WAIT) + await tutorial_1_page.click(selectors.NEW_FILE_SELECTOR) + await tutorial_1_page.waitForTimeout(PAGE_WAIT) + await tutorial_1_page.waitForSelector(selectors.CONFIRM_NEW_PAGE_SELECTOR) + await tutorial_1_page.click(selectors.CONFIRM_NEW_PAGE_SELECTOR) + await tutorial_1_page.waitForTimeout(PAGE_WAIT * 2) + + await tutorial_1_page.waitForFunction(() => { + let el = document.querySelector('#loading-spinner'); + return el == null || el.clientHeight === 0; + }, { timeout: TIMEOUT }); + + await tutorial_1_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT * 10 }) + + console.log('Page opened successfully') + + }) + + + it('Create and Simulate network', async () => { + + await tutorial_1_page.waitForTimeout(PAGE_WAIT * 2) + await tutorial_1_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT }) + + console.log('Tutorial #1') + + await tutorial_1_page.waitForTimeout(PAGE_WAIT) + await tutorial_1_page.waitForSelector(selectors.TUTORIALS_BUTTON_SELECTOR, { timeout: TIMEOUT }) + await tutorial_1_page.click( selectors.TUTORIALS_BUTTON_SELECTOR, { timeout: TIMEOUT }) + await tutorial_1_page.waitForSelector(selectors.TUTORIAL_1_SELECTOR, { timeout: TIMEOUT }) + await tutorial_1_page.click( selectors.TUTORIAL_1_SELECTOR, { timeout: TIMEOUT }) + await tutorial_1_page.waitForSelector(selectors.PYR_CELL_SELECTOR) + await tutorial_1_page.waitForTimeout(PAGE_WAIT) + + await tutorial_1_page.waitForSelector(selectors.MODEL_BUTTON_SELECTOR) + await tutorial_1_page.click( selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await tutorial_1_page.waitForSelector(selectors.CREATE_NETWORK_SELECTOR) + await tutorial_1_page.click( selectors.CREATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + + console.log('Create network') + + await tutorial_1_page.waitForTimeout(PAGE_WAIT) + + console.log('... taking snapshot ...'); + await tutorial_1_page.waitForTimeout(PAGE_WAIT); + expect(await tutorial_1_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Tutorial#1 Network' + }); + + await tutorial_1_page.waitForSelector( selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await tutorial_1_page.click( selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await tutorial_1_page.waitForSelector( selectors.SIMULATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + await tutorial_1_page.click( selectors.SIMULATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + console.log('Simulate network') + + await tutorial_1_page.waitForSelector(selectors.SIMULATION_PAGE_SELECTOR, { timeout: TIMEOUT * 2 }); + + await tutorial_1_page.waitForTimeout(PAGE_WAIT) + + }); + + + it('Connections Plot', async () => { + + await tutorial_1_page.waitForTimeout(PAGE_WAIT * 2); + await tutorial_1_page.waitForSelector( selectors.CONNECTIONS_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_1_page.click( selectors.CONNECTIONS_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_1_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Connections Plot ...') + await tutorial_1_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_1_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Connections Plot' + }); + + }); + + it('2D Net Plot', async () => { + await tutorial_1_page.waitForSelector( selectors.TWO_D_NET_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_1_page.click( selectors.TWO_D_NET_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_1_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View 2D Net Plot ...') + await tutorial_1_page.waitForTimeout(PAGE_WAIT * 2); + + console.log('... taking snapshot ...'); + expect(await tutorial_1_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: '2D Net Plot' + }); + }); + + it('Cell Traces Plot', async () => { + await tutorial_1_page.waitForSelector( selectors.CELL_TRACES_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_1_page.click( selectors.CELL_TRACES_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_1_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Cell Traces Plot ...') + await tutorial_1_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_1_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Cell Traces Plot' + }); + }); + + it('Raster Plot', async () => { + await tutorial_1_page.waitForSelector( selectors.RASTER_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_1_page.click( selectors.RASTER_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_1_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Raster Plot ...') + await tutorial_1_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_1_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Raster Plot' + }); + }); + + it('Spike Hist Plot', async () => { + await tutorial_1_page.waitForSelector( selectors.SPIKE_HIST_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_1_page.click( selectors.SPIKE_HIST_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_1_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Spike Hist Plot ...') + await tutorial_1_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_1_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Spike Hist Plot' + }); + }); + + it('Granger Plot', async () => { + await tutorial_1_page.waitForSelector( selectors.GRANGER_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_1_page.click( selectors.GRANGER_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_1_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Granger Plot ...') + await tutorial_1_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_1_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Granger Plot' + }); + }); + + it('Rate Spectogram Plot', async () => { + await tutorial_1_page.waitForSelector( selectors.RATE_SPECTROGRAM_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_1_page.click( selectors.RATE_SPECTROGRAM_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_1_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + + await tutorial_1_page.waitForTimeout(PAGE_WAIT); + + // await tutorial_1_page.click( selectors.CONNECTIONS_PLOT_SELECTOR, { timeout: TIMEOUT }) + // await tutorial_1_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + + // await tutorial_1_page.waitForTimeout(PAGE_WAIT); + + // await tutorial_1_page.click( selectors.RATE_SPECTROGRAM_PLOT_SELECTOR, { timeout: TIMEOUT }) + // await tutorial_1_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + + console.log('View Rate Spectogram Plot ...') + await tutorial_1_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_1_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Rate Spectogram Plot' + }); + + await tutorial_1_page.waitForTimeout(PAGE_WAIT); + }); + +}); \ No newline at end of file diff --git a/tests/frontend/e2e/tests/Tut#2_smoke.test.js b/tests/frontend/e2e/tests/Tut#2_smoke.test.js new file mode 100644 index 00000000..97f714f2 --- /dev/null +++ b/tests/frontend/e2e/tests/Tut#2_smoke.test.js @@ -0,0 +1,279 @@ +//IMPORTS: +import 'expect-puppeteer'; +import puppeteer from 'puppeteer'; +import { click } from './utils'; +import { toMatchImageSnapshot } from 'jest-image-snapshot' +expect.extend({ toMatchImageSnapshot }) +const path = require('path'); +var scriptName = path.basename(__filename, '.js'); +import * as selectors from './selectors' + + + +//PAGE INFO: +const baseURL = process.env.url || 'https://test.netpyne.metacell.us/' +const PAGE_WAIT = 3000; +const TIMEOUT = 60000; + +//SNAPSHOT: +const SNAPSHOT_OPTIONS = { + customSnapshotsDir: `./tests/snapshots/${scriptName}`, + comparisonMethod: 'ssim', + failureThresholdType: 'percent', + failureThreshold: 0.5 +}; + +let r = (Math.random() + 1).toString(36).substring(2); + +//USERS: +const USERNAME = `TestUser${r}` +const PASSWORD = 'testpassword' + +//TESTS: + +jest.setTimeout(3000000); +let browser2; +let tutorial_2_page; + +describe('Tutorial #2 for Smoke Testing', () => { + + beforeAll(async () => { + browser2 = await puppeteer.launch( + { + headless: 'new', + args: ['--no-sandbox', '--disable-setuid-sandbox'], + defaultViewport: { + width: 1300, + height: 1024 + }, + } + ); + tutorial_2_page = await browser2.newPage(); + await tutorial_2_page.goto(baseURL); + + await tutorial_2_page.goto(baseURL); + if (baseURL.includes('test.netpyne.metacell.us')) { + console.log('Logging in as test user ...') + await tutorial_2_page.waitForSelector(selectors.LOGIN_PAGE_SELECTOR); + await tutorial_2_page.waitForSelector(selectors.USERNAME_SELECTOR) + await expect(tutorial_2_page) + .toFill(selectors.USERNAME_SELECTOR, USERNAME, { timeout: TIMEOUT }); + + await tutorial_2_page.waitForSelector(selectors.PASSWORD_SELECTOR) + await expect(tutorial_2_page) + .toFill(selectors.PASSWORD_SELECTOR, PASSWORD, { timeout: TIMEOUT }); + + await tutorial_2_page.click(selectors.LOGIN_BUTTON_SELECTOR) + // Wait for initial loading spinner to disappear + await tutorial_2_page.waitForFunction(() => { + let el = document.querySelector('#loading-spinner'); + return el == null || el.clientHeight === 0; + }, { timeout: TIMEOUT }); + console.log('Logged in successfully') + } + }); + + afterAll(async () => { + // Close the browser instance after all tests have run + await browser2.close(); + }); + + it('Open new page', async () => { + + console.log('Opening a new NetPyNE page') + + await tutorial_2_page.on("dialog", dialog => + dialog.accept()); + + await tutorial_2_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT * 6, visible: true }) + await tutorial_2_page.waitForSelector(selectors.FILE_TAB_SELECTOR, { timeout: PAGE_WAIT * 3 }) + await tutorial_2_page.waitForTimeout(PAGE_WAIT) + await tutorial_2_page.click(selectors.FILE_TAB_SELECTOR) + await tutorial_2_page.waitForSelector(selectors.NEW_FILE_SELECTOR, { timeout: PAGE_WAIT * 3 }) + await tutorial_2_page.waitForTimeout(PAGE_WAIT) + await tutorial_2_page.click(selectors.NEW_FILE_SELECTOR) + await tutorial_2_page.waitForTimeout(PAGE_WAIT) + await tutorial_2_page.waitForSelector(selectors.CONFIRM_NEW_PAGE_SELECTOR) + await tutorial_2_page.click(selectors.CONFIRM_NEW_PAGE_SELECTOR) + await tutorial_2_page.waitForTimeout(PAGE_WAIT * 2) + + await tutorial_2_page.waitForFunction(() => { + let el = document.querySelector('#loading-spinner'); + return el == null || el.clientHeight === 0; + }, { timeout: TIMEOUT }); + + await tutorial_2_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT * 10 }) + + console.log('Page opened successfully') + + }) + + + it('Create and Simulate network', async () => { + + await tutorial_2_page.waitForTimeout(PAGE_WAIT * 2) + await tutorial_2_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT }) + + console.log('Tutorial #2') + + await tutorial_2_page.waitForTimeout(PAGE_WAIT) + await tutorial_2_page.waitForSelector(selectors.TUTORIALS_BUTTON_SELECTOR, { visible: true }) + await tutorial_2_page.click(selectors.TUTORIALS_BUTTON_SELECTOR, { timeout: TIMEOUT }) + await tutorial_2_page.waitForSelector(selectors.TUTORIAL_2_SELECTOR, { visible: true }) + await tutorial_2_page.click(selectors.TUTORIAL_2_SELECTOR, { timeout: TIMEOUT }) + await tutorial_2_page.waitForSelector(selectors.PYR_2_CELL_SELECTOR) + await tutorial_2_page.waitForSelector(selectors.INT_CELL_SELECTOR) + await tutorial_2_page.waitForTimeout(PAGE_WAIT) + + await tutorial_2_page.waitForSelector(selectors.MODEL_BUTTON_SELECTOR) + await tutorial_2_page.click(selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await tutorial_2_page.waitForSelector(selectors.CREATE_NETWORK_SELECTOR) + await tutorial_2_page.click(selectors.CREATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + + console.log('Create network') + + await tutorial_2_page.waitForTimeout(PAGE_WAIT * 3) + + await tutorial_2_page.waitForSelector(selectors.THREE_D_REP_SELECTOR, { timeout: TIMEOUT * 3 }) + + console.log('... taking snapshot ...'); + await tutorial_2_page.waitForTimeout(PAGE_WAIT); + expect(await tutorial_2_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Tutorial#2 Network' + }); + await tutorial_2_page.waitForSelector(selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await tutorial_2_page.click(selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await tutorial_2_page.waitForSelector(selectors.SIMULATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + await tutorial_2_page.click(selectors.SIMULATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + console.log('Simulate network') + + await tutorial_2_page.waitForSelector(selectors.SIMULATION_PAGE_SELECTOR, { timeout: TIMEOUT * 2 }); + + await tutorial_2_page.waitForSelector(selectors.RASTER_PLOT_SELECTOR, { timeout: TIMEOUT * 3 }) + + + }); + + + it('Connections Plot', async () => { + + await tutorial_2_page.waitForTimeout(PAGE_WAIT * 2); + await tutorial_2_page.waitForSelector(selectors.CONNECTIONS_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_2_page.click(selectors.CONNECTIONS_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_2_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Connections Plot ...') + await tutorial_2_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_2_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Connections Plot' + }); + + }); + + it('2D Net Plot', async () => { + await tutorial_2_page.waitForSelector(selectors.TWO_D_NET_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_2_page.click(selectors.TWO_D_NET_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_2_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View 2D Net Plot ...') + await tutorial_2_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_2_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: '2D Net Plot' + }); + }); + + it('Cell Traces Plot', async () => { + await tutorial_2_page.waitForSelector(selectors.CELL_TRACES_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_2_page.click(selectors.CELL_TRACES_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_2_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Cell Traces Plot ...') + await tutorial_2_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_2_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Cell Traces Plot' + }); + }); + + it('Raster Plot', async () => { + await tutorial_2_page.waitForSelector(selectors.RASTER_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_2_page.click(selectors.RASTER_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_2_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Raster Plot ...') + await tutorial_2_page.waitForTimeout(PAGE_WAIT * 3); + + console.log('... taking snapshot ...'); + expect(await tutorial_2_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Raster Plot' + }); + }); + + it('Spike Hist Plot', async () => { + await tutorial_2_page.waitForSelector(selectors.SPIKE_HIST_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_2_page.click(selectors.SPIKE_HIST_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_2_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Spike Hist Plot ...') + await tutorial_2_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_2_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Spike Hist Plot' + }); + }); + + it('Granger Plot', async () => { + await tutorial_2_page.waitForSelector(selectors.GRANGER_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_2_page.click(selectors.GRANGER_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_2_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Granger Plot ...') + await tutorial_2_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_2_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Granger Plot' + }); + }); + + it('Rate Spectogram Plot', async () => { + await tutorial_2_page.waitForSelector(selectors.RATE_SPECTROGRAM_PLOT_SELECTOR, { visible: true, timeout: TIMEOUT}) + await tutorial_2_page.click(selectors.RATE_SPECTROGRAM_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_2_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + + await tutorial_2_page.waitForTimeout(PAGE_WAIT); + + // await tutorial_2_page.click(selectors.CONNECTIONS_PLOT_SELECTOR, { timeout: TIMEOUT }) + // await tutorial_2_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + + // await tutorial_2_page.waitForTimeout(PAGE_WAIT); + + // await tutorial_2_page.click(selectors.RATE_SPECTROGRAM_PLOT_SELECTOR, { timeout: TIMEOUT }) + // await tutorial_2_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + + console.log('View Rate Spectogram Plot ...') + await tutorial_2_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_2_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Rate Spectogram Plot' + }); + }); + +}); \ No newline at end of file diff --git a/tests/frontend/e2e/tests/Tut#3a_smoke.test.js b/tests/frontend/e2e/tests/Tut#3a_smoke.test.js new file mode 100644 index 00000000..f3d246db --- /dev/null +++ b/tests/frontend/e2e/tests/Tut#3a_smoke.test.js @@ -0,0 +1,340 @@ +//IMPORTS: +import 'expect-puppeteer'; +import puppeteer from 'puppeteer'; +import { click } from './utils'; +import { toMatchImageSnapshot } from 'jest-image-snapshot' +expect.extend({ toMatchImageSnapshot }) +const path = require('path'); +var scriptName = path.basename(__filename, '.js'); +import * as selectors from './selectors' + + +//PAGE INFO: +const baseURL = process.env.url || 'https://test.netpyne.metacell.us/' +const PAGE_WAIT = 3000; +const TIMEOUT = 60000; + +//SNAPSHOT: +const SNAPSHOT_OPTIONS = { + customSnapshotsDir: `./tests/snapshots/${scriptName}`, + comparisonMethod: 'ssim', + failureThresholdType: 'percent', + failureThreshold: 0.5 +}; + +let r = (Math.random() + 1).toString(36).substring(2); + +//USERS: +const USERNAME = `TestUser${r}` +const PASSWORD = 'testpassword' + + +//TESTS: + +jest.setTimeout(3000000); +let browser3; +let tutorial_3a_page; + + +describe('Tutorial #3a for Smoke Testing', () => { + + beforeAll(async () => { + browser3 = await puppeteer.launch( + { + headless: 'new', + args: ['--no-sandbox', '--disable-setuid-sandbox'], + defaultViewport: { + width: 1300, + height: 1024 + }, + } + ); + tutorial_3a_page = await browser3.newPage(); + await tutorial_3a_page.goto(baseURL); + if (baseURL.includes('test.netpyne.metacell.us')) { + console.log('Logging in as test user ...') + await tutorial_3a_page.waitForSelector(selectors.LOGIN_PAGE_SELECTOR); + await tutorial_3a_page.waitForSelector(selectors.USERNAME_SELECTOR) + await expect(tutorial_3a_page) + .toFill(selectors.USERNAME_SELECTOR, USERNAME, { timeout: TIMEOUT }); + + await tutorial_3a_page.waitForSelector(selectors.PASSWORD_SELECTOR) + await expect(tutorial_3a_page) + .toFill(selectors.PASSWORD_SELECTOR, PASSWORD, { timeout: TIMEOUT }); + + await tutorial_3a_page.click(selectors.LOGIN_BUTTON_SELECTOR) + // Wait for initial loading spinner to disappear + await tutorial_3a_page.waitForFunction(() => { + let el = document.querySelector('#loading-spinner'); + return el == null || el.clientHeight === 0; + }, { timeout: TIMEOUT }); + console.log('Logged in successfully') + } + }); + + afterAll(async () => { + // Close the browser instance after all tests have run + await browser3.close(); + }); + + it('Open new page', async () => { + + console.log('Opening a new NetPyNE page') + + await tutorial_3a_page.on("dialog", dialog => + dialog.accept()); + + await tutorial_3a_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT * 6, visible: true }) + await tutorial_3a_page.waitForSelector(selectors.FILE_TAB_SELECTOR, { timeout: PAGE_WAIT * 3 }) + await tutorial_3a_page.waitForTimeout(PAGE_WAIT) + await tutorial_3a_page.click(selectors.FILE_TAB_SELECTOR) + await tutorial_3a_page.waitForSelector(selectors.NEW_FILE_SELECTOR, { timeout: PAGE_WAIT * 3 }) + await tutorial_3a_page.waitForTimeout(PAGE_WAIT) + await tutorial_3a_page.click(selectors.NEW_FILE_SELECTOR) + await tutorial_3a_page.waitForTimeout(PAGE_WAIT) + await tutorial_3a_page.waitForSelector(selectors.CONFIRM_NEW_PAGE_SELECTOR) + await tutorial_3a_page.click(selectors.CONFIRM_NEW_PAGE_SELECTOR) + await tutorial_3a_page.waitForTimeout(PAGE_WAIT * 2) + + await tutorial_3a_page.waitForFunction(() => { + let el = document.querySelector('#loading-spinner'); + return el == null || el.clientHeight === 0; + }, { timeout: TIMEOUT }); + + await tutorial_3a_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT * 10 }) + + console.log('Page opened successfully') + + }) + + + it('Create and Simulate network', async () => { + + await tutorial_3a_page.waitForTimeout(PAGE_WAIT * 2) + await tutorial_3a_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT }) + + console.log('Tutorial #3a') + + await tutorial_3a_page.waitForTimeout(PAGE_WAIT) + await tutorial_3a_page.waitForSelector(selectors.TUTORIALS_BUTTON_SELECTOR, { visible: true }) + + await tutorial_3a_page.click(selectors.TUTORIALS_BUTTON_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3a_page.waitForSelector(selectors.TUTORIAL_3A_SELECTOR, { visible: true }) + await tutorial_3a_page.click(selectors.TUTORIAL_3A_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3a_page.waitForSelector(selectors.E_CELL_TYPE_SELECTOR) + await tutorial_3a_page.waitForSelector(selectors.I_CELL_TYPE_SELECTOR) + await tutorial_3a_page.waitForTimeout(PAGE_WAIT) + + await tutorial_3a_page.waitForSelector(selectors.MODEL_BUTTON_SELECTOR) + await tutorial_3a_page.click(selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await tutorial_3a_page.waitForSelector(selectors.CREATE_NETWORK_SELECTOR) + await tutorial_3a_page.click(selectors.CREATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + + console.log('Create network') + + await tutorial_3a_page.waitForTimeout(PAGE_WAIT * 3) + + await tutorial_3a_page.waitForSelector(selectors.THREE_D_REP_SELECTOR, { timeout: TIMEOUT }) + + console.log('... taking snapshot ...'); + await tutorial_3a_page.waitForTimeout(PAGE_WAIT); + expect(await tutorial_3a_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Tutorial#3a Network' + }); + await tutorial_3a_page.waitForSelector(selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await tutorial_3a_page.click(selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await tutorial_3a_page.waitForSelector(selectors.SIMULATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + await tutorial_3a_page.click(selectors.SIMULATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + + + console.log('Simulate network') + + await tutorial_3a_page.waitForSelector(selectors.SIMULATION_PAGE_SELECTOR, { timeout: TIMEOUT * 2 }); + + await tutorial_3a_page.waitForSelector(selectors.RASTER_PLOT_SELECTOR, { timeout: TIMEOUT * 10 }) + + + }); + + + it('Connections Plot', async () => { + + await tutorial_3a_page.waitForTimeout(PAGE_WAIT * 2); + await tutorial_3a_page.waitForSelector(selectors.CONNECTIONS_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3a_page.click(selectors.CONNECTIONS_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3a_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Connections Plot ...') + await tutorial_3a_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_3a_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Connections Plot' + }); + + }); + + it('2D Net Plot', async () => { + await tutorial_3a_page.waitForSelector(selectors.TWO_D_NET_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3a_page.click(selectors.TWO_D_NET_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3a_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View 2D Net Plot ...') + await tutorial_3a_page.waitForTimeout(PAGE_WAIT * 3); + + console.log('... taking snapshot ...'); + expect(await tutorial_3a_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: '2D Net Plot' + }); + }); + + it('Cell Traces Plot', async () => { + await tutorial_3a_page.waitForSelector(selectors.CELL_TRACES_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3a_page.click(selectors.CELL_TRACES_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3a_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Cell Traces Plot ...') + await tutorial_3a_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_3a_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Cell Traces Plot' + }); + }); + + it('Raster Plot', async () => { + await tutorial_3a_page.waitForSelector(selectors.RASTER_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3a_page.click(selectors.RASTER_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3a_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Raster Plot ...') + await tutorial_3a_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_3a_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Raster Plot' + }); + }); + + it('Spike Hist Plot', async () => { + await tutorial_3a_page.waitForSelector(selectors.SPIKE_HIST_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3a_page.click(selectors.SPIKE_HIST_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3a_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Spike Hist Plot ...') + await tutorial_3a_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_3a_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Spike Hist Plot' + }); + }); + + it('LFP Time Series Plot', async () => { + await tutorial_3a_page.waitForSelector(selectors.LFP_TS_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3a_page.click(selectors.LFP_TS_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3a_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View LFP Time Series Plot ...') + await tutorial_3a_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_3a_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'LFP Time Series Plot' + }); + }); + + it('LFP PSD Plot', async () => { + await tutorial_3a_page.waitForSelector(selectors.LFP_PSD_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3a_page.click(selectors.LFP_PSD_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3a_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View LFP PSD Plot ...') + await tutorial_3a_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_3a_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'LFP PSD Plot' + }); + }); + + it('LFP Spectrogram Plot', async () => { + await tutorial_3a_page.waitForSelector(selectors.LFP_SPECTOGRAM_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3a_page.click(selectors.LFP_SPECTOGRAM_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3a_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View LFP Spectrogram Plot ...') + await tutorial_3a_page.waitForTimeout(PAGE_WAIT * 5); + + console.log('... taking snapshot ...'); + expect(await tutorial_3a_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'LFP Spectrogram Plot' + }); + }); + + it('Granger Plot', async () => { + await tutorial_3a_page.waitForSelector(selectors.GRANGER_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3a_page.click(selectors.GRANGER_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3a_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Granger Plot ...') + await tutorial_3a_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_3a_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Granger Plot' + }); + }); + + it('RxD concentration plot', async () => { + await tutorial_3a_page.waitForSelector(selectors.RXD_CONCENTRATION_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3a_page.click(selectors.RXD_CONCENTRATION_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3a_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View RxD concentration plot ...') + await tutorial_3a_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_3a_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'RxD concentration plot' + }); + }); + + it('Rate Spectogram Plot', async () => { + await tutorial_3a_page.waitForSelector(selectors.RATE_SPECTROGRAM_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3a_page.click(selectors.RATE_SPECTROGRAM_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3a_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + + await tutorial_3a_page.waitForTimeout(PAGE_WAIT); + // await tutorial_3a_page.waitForSelector(selectors.CONNECTIONS_PLOT_SELECTOR, { timeout: TIMEOUT }) + // await tutorial_3a_page.click(selectors.CONNECTIONS_PLOT_SELECTOR, { timeout: TIMEOUT }) + // await tutorial_3a_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + + // await tutorial_3a_page.waitForTimeout(PAGE_WAIT); + + // await tutorial_3a_page.click(selectors.RATE_SPECTROGRAM_PLOT_SELECTOR, { timeout: TIMEOUT }) + // await tutorial_3a_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + + console.log('View Rate Spectogram Plot ...') + await tutorial_3a_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_3a_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Rate Spectogram Plot' + }); + }); +}); \ No newline at end of file diff --git a/tests/frontend/e2e/tests/Tut#3b_smoke.test.js b/tests/frontend/e2e/tests/Tut#3b_smoke.test.js new file mode 100644 index 00000000..da3b28b6 --- /dev/null +++ b/tests/frontend/e2e/tests/Tut#3b_smoke.test.js @@ -0,0 +1,340 @@ +//IMPORTS: +import 'expect-puppeteer'; +import puppeteer from 'puppeteer'; +import { click } from './utils'; +import { toMatchImageSnapshot } from 'jest-image-snapshot' +expect.extend({ toMatchImageSnapshot }) +const path = require('path'); +var scriptName = path.basename(__filename, '.js'); +import * as selectors from './selectors' + + +//PAGE INFO: +const baseURL = process.env.url || 'https://test.netpyne.metacell.us/' +const PAGE_WAIT = 3000; +const TIMEOUT = 60000; + +//SNAPSHOT: +const SNAPSHOT_OPTIONS = { + customSnapshotsDir: `./tests/snapshots/${scriptName}`, + comparisonMethod: 'ssim', + failureThresholdType: 'percent', + failureThreshold: 0.5 +}; + + +let r = (Math.random() + 1).toString(36).substring(2); + +//USERS: +const USERNAME = `TestUser${r}` +const PASSWORD = 'testpassword' + + +//TESTS: + +jest.setTimeout(3000000); +let browser3b; +let tutorial_3b_page; + + +describe('Tutorial #3b for Smoke Testing', () => { + + beforeAll(async () => { + browser3b = await puppeteer.launch( + { + headless: 'new', + args: ['--no-sandbox', '--disable-setuid-sandbox'], + defaultViewport: { + width: 1300, + height: 1024 + }, + } + ); + tutorial_3b_page = await browser3b.newPage(); + await tutorial_3b_page.goto(baseURL); + if (baseURL.includes('test.netpyne.metacell.us')) { + console.log('Logging in as test user ...') + await tutorial_3b_page.waitForSelector(selectors.LOGIN_PAGE_SELECTOR); + await tutorial_3b_page.waitForSelector(selectors.USERNAME_SELECTOR) + await expect(tutorial_3b_page) + .toFill(selectors.USERNAME_SELECTOR, USERNAME, { timeout: TIMEOUT }); + + await tutorial_3b_page.waitForSelector(selectors.PASSWORD_SELECTOR) + await expect(tutorial_3b_page) + .toFill(selectors.PASSWORD_SELECTOR, PASSWORD, { timeout: TIMEOUT }); + + await tutorial_3b_page.click(selectors.LOGIN_BUTTON_SELECTOR) + // Wait for initial loading spinner to disappear + await tutorial_3b_page.waitForFunction(() => { + let el = document.querySelector('#loading-spinner'); + return el == null || el.clientHeight === 0; + }, { timeout: TIMEOUT }); + console.log('Logged in successfully') + } + }); + + afterAll(async () => { + // Close the browser instance after all tests have run + await browser3b.close(); + }); + + it('Open new page', async () => { + + console.log('Opening a new NetPyNE page') + + await tutorial_3b_page.on("dialog", dialog => + dialog.accept()); + + await tutorial_3b_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT * 6, visible: true }) + await tutorial_3b_page.waitForSelector(selectors.FILE_TAB_SELECTOR, { timeout: PAGE_WAIT * 3 }) + await tutorial_3b_page.waitForTimeout(PAGE_WAIT) + await tutorial_3b_page.click(selectors.FILE_TAB_SELECTOR) + await tutorial_3b_page.waitForSelector(selectors.NEW_FILE_SELECTOR, { timeout: PAGE_WAIT * 3 }) + await tutorial_3b_page.waitForTimeout(PAGE_WAIT) + await tutorial_3b_page.click(selectors.NEW_FILE_SELECTOR) + await tutorial_3b_page.waitForTimeout(PAGE_WAIT) + await tutorial_3b_page.waitForSelector(selectors.CONFIRM_NEW_PAGE_SELECTOR) + await tutorial_3b_page.click(selectors.CONFIRM_NEW_PAGE_SELECTOR) + await tutorial_3b_page.waitForTimeout(PAGE_WAIT * 2) + + await tutorial_3b_page.waitForFunction(() => { + let el = document.querySelector('#loading-spinner'); + return el == null || el.clientHeight === 0; + }, { timeout: TIMEOUT }); + + await tutorial_3b_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT * 10 }) + + console.log('Page opened successfully') + + }) + + + it('Create and Simulate network', async () => { + + await tutorial_3b_page.waitForTimeout(PAGE_WAIT * 2) + await tutorial_3b_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT }) + + console.log('Tutorial #3b') + + await tutorial_3b_page.waitForTimeout(PAGE_WAIT) + await tutorial_3b_page.waitForSelector(selectors.TUTORIALS_BUTTON_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3b_page.click(selectors.TUTORIALS_BUTTON_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3b_page.waitForSelector(selectors.TUTORIAL_3B_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3b_page.click(selectors.TUTORIAL_3B_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3b_page.waitForSelector(selectors.E_CELL_TYPE_SELECTOR) + await tutorial_3b_page.waitForSelector(selectors.I_CELL_TYPE_SELECTOR) + await tutorial_3b_page.waitForTimeout(PAGE_WAIT) + + await tutorial_3b_page.waitForSelector(selectors.MODEL_BUTTON_SELECTOR) + await tutorial_3b_page.click(selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await tutorial_3b_page.waitForSelector(selectors.CREATE_NETWORK_SELECTOR) + await tutorial_3b_page.click(selectors.CREATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + + console.log('Create network') + + await tutorial_3b_page.waitForTimeout(PAGE_WAIT * 3) + + await tutorial_3b_page.waitForSelector(selectors.THREE_D_REP_SELECTOR) + + console.log('... taking snapshot ...'); + await tutorial_3b_page.waitForTimeout(PAGE_WAIT); + expect(await tutorial_3b_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Tutorial#3b Network' + }); + await tutorial_3b_page.waitForSelector(selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await tutorial_3b_page.click(selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await tutorial_3b_page.waitForSelector(selectors.SIMULATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + await tutorial_3b_page.click(selectors.SIMULATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + + console.log('Simulate network') + + await tutorial_3b_page.waitForSelector(selectors.SIMULATION_PAGE_SELECTOR, { timeout: TIMEOUT * 2 }); + + await tutorial_3b_page.waitForSelector(selectors.RASTER_PLOT_SELECTOR, { timeout: TIMEOUT * 3 }) + + + }); + + + it('Connections Plot', async () => { + + await tutorial_3b_page.waitForTimeout(PAGE_WAIT * 2); + await tutorial_3b_page.waitForSelector(selectors.CONNECTIONS_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3b_page.click(selectors.CONNECTIONS_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3b_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Connections Plot ...') + await tutorial_3b_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_3b_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Connections Plot' + }); + + }); + + it('2D Net Plot', async () => { + await tutorial_3b_page.waitForSelector(selectors.TWO_D_NET_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3b_page.click(selectors.TWO_D_NET_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3b_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View 2D Net Plot ...') + await tutorial_3b_page.waitForTimeout(PAGE_WAIT * 3); + + console.log('... taking snapshot ...'); + expect(await tutorial_3b_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: '2D Net Plot' + }); + }); + + it('Cell Traces Plot', async () => { + await tutorial_3b_page.waitForSelector(selectors.CELL_TRACES_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3b_page.click(selectors.CELL_TRACES_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3b_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Cell Traces Plot ...') + await tutorial_3b_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_3b_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Cell Traces Plot' + }); + }); + + it('Raster Plot', async () => { + await tutorial_3b_page.waitForSelector(selectors.RASTER_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3b_page.click(selectors.RASTER_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3b_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Raster Plot ...') + await tutorial_3b_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_3b_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Raster Plot' + }); + }); + + it('Spike Hist Plot', async () => { + await tutorial_3b_page.waitForSelector(selectors.SPIKE_HIST_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3b_page.click(selectors.SPIKE_HIST_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3b_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Spike Hist Plot ...') + await tutorial_3b_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_3b_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Spike Hist Plot' + }); + }); + + it('LFP Time Series Plot', async () => { + await tutorial_3b_page.waitForSelector(selectors.LFP_TS_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3b_page.click(selectors.LFP_TS_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3b_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View LFP Time Series Plot ...') + await tutorial_3b_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_3b_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'LFP Time Series Plot' + }); + }); + + it('LFP PSD Plot', async () => { + await tutorial_3b_page.waitForSelector(selectors.LFP_PSD_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3b_page.click(selectors.LFP_PSD_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3b_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View LFP PSD Plot ...') + await tutorial_3b_page.waitForTimeout(PAGE_WAIT * 2); + + console.log('... taking snapshot ...'); + expect(await tutorial_3b_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'LFP PSD Plot' + }); + }); + + it('LFP Spectrogram Plot', async () => { + await tutorial_3b_page.waitForSelector(selectors.LFP_SPECTOGRAM_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3b_page.click(selectors.LFP_SPECTOGRAM_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3b_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View LFP Spectrogram Plot ...') + await tutorial_3b_page.waitForTimeout(PAGE_WAIT * 5); + + console.log('... taking snapshot ...'); + expect(await tutorial_3b_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'LFP Spectrogram Plot' + }); + }); + + it('Granger Plot', async () => { + await tutorial_3b_page.waitForSelector(selectors.GRANGER_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3b_page.click(selectors.GRANGER_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3b_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Granger Plot ...') + await tutorial_3b_page.waitForTimeout(PAGE_WAIT * 2); + + console.log('... taking snapshot ...'); + expect(await tutorial_3b_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Granger Plot' + }); + }); + + it('RxD concentration plot', async () => { + await tutorial_3b_page.waitForSelector(selectors.RXD_CONCENTRATION_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3b_page.click(selectors.RXD_CONCENTRATION_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3b_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View RxD concentration plot ...') + await tutorial_3b_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_3b_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'RxD concentration plot' + }); + }); + + it('Rate Spectogram Plot', async () => { + await tutorial_3b_page.waitForSelector(selectors.RATE_SPECTROGRAM_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3b_page.click(selectors.RATE_SPECTROGRAM_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3b_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + + await tutorial_3b_page.waitForTimeout(PAGE_WAIT); + + // await tutorial_3b_page.click(selectors.CONNECTIONS_PLOT_SELECTOR, { timeout: TIMEOUT }) + // await tutorial_3b_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + + // await tutorial_3b_page.waitForTimeout(PAGE_WAIT); + + // await tutorial_3b_page.click(selectors.RATE_SPECTROGRAM_PLOT_SELECTOR, { timeout: TIMEOUT }) + // await tutorial_3b_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + + console.log('View Rate Spectogram Plot ...') + await tutorial_3b_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_3b_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Rate Spectogram Plot' + }); + }); + +}); \ No newline at end of file diff --git a/tests/frontend/e2e/tests/Tut#3c_smoke.test.js b/tests/frontend/e2e/tests/Tut#3c_smoke.test.js new file mode 100644 index 00000000..6c2b68fd --- /dev/null +++ b/tests/frontend/e2e/tests/Tut#3c_smoke.test.js @@ -0,0 +1,329 @@ +//IMPORTS: +import 'expect-puppeteer'; +import puppeteer from 'puppeteer'; +import { click } from './utils'; +import { toMatchImageSnapshot } from 'jest-image-snapshot' +expect.extend({ toMatchImageSnapshot }) +const path = require('path'); +var scriptName = path.basename(__filename, '.js'); +import * as selectors from './selectors' + + + +//PAGE INFO: +const baseURL = process.env.url || 'https://test.netpyne.metacell.us/' +const PAGE_WAIT = 3000; +const TIMEOUT = 60000; + +//SNAPSHOT: +const SNAPSHOT_OPTIONS = { + customSnapshotsDir: `./tests/snapshots/${scriptName}`, + comparisonMethod: 'ssim', + failureThresholdType: 'percent', + failureThreshold: 0.5 +}; + + +let r = (Math.random() + 1).toString(36).substring(2); + +//USERS: +const USERNAME = `TestUser${r}` +const PASSWORD = 'testpassword' + + +//TESTS: + +jest.setTimeout(3000000); +let browser3c; +let tutorial_3c_page; + + +describe('Tutorial #3c for Smoke Testing', () => { + + beforeAll(async () => { + browser3c = await puppeteer.launch( + { + headless: 'new', + args: ['--no-sandbox', '--disable-setuid-sandbox'], + defaultViewport: { + width: 1300, + height: 1024 + }, + } + ); + tutorial_3c_page = await browser3c.newPage(); + await tutorial_3c_page.goto(baseURL); + if (baseURL.includes('test.netpyne.metacell.us')) { + console.log('Logging in as test user ...') + await tutorial_3c_page.waitForSelector(selectors.LOGIN_PAGE_SELECTOR); + await tutorial_3c_page.waitForSelector(selectors.USERNAME_SELECTOR) + await expect(tutorial_3c_page) + .toFill(selectors.USERNAME_SELECTOR, USERNAME, { timeout: TIMEOUT }); + + await tutorial_3c_page.waitForSelector(selectors.PASSWORD_SELECTOR) + await expect(tutorial_3c_page) + .toFill(selectors.PASSWORD_SELECTOR, PASSWORD, { timeout: TIMEOUT }); + + await tutorial_3c_page.click(selectors.LOGIN_BUTTON_SELECTOR) + // Wait for initial loading spinner to disappear + await tutorial_3c_page.waitForFunction(() => { + let el = document.querySelector('#loading-spinner'); + return el == null || el.clientHeight === 0; + }, { timeout: TIMEOUT }); + console.log('Logged in successfully') + } + }); + + afterAll(async () => { + // Close the browser instance after all tests have run + await browser3c.close(); + }); + + it('Open new page', async () => { + + console.log('Opening a new NetPyNE page') + + await tutorial_3c_page.on("dialog", dialog => + dialog.accept()); + + await tutorial_3c_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT * 6, visible: true }) + await tutorial_3c_page.waitForSelector(selectors.FILE_TAB_SELECTOR, { timeout: PAGE_WAIT * 3 }) + await tutorial_3c_page.waitForTimeout(PAGE_WAIT) + await tutorial_3c_page.click(selectors.FILE_TAB_SELECTOR) + await tutorial_3c_page.waitForSelector(selectors.NEW_FILE_SELECTOR, { timeout: PAGE_WAIT * 3 }) + await tutorial_3c_page.waitForTimeout(PAGE_WAIT) + await tutorial_3c_page.click(selectors.NEW_FILE_SELECTOR) + await tutorial_3c_page.waitForTimeout(PAGE_WAIT) + await tutorial_3c_page.waitForSelector(selectors.CONFIRM_NEW_PAGE_SELECTOR) + await tutorial_3c_page.click(selectors.CONFIRM_NEW_PAGE_SELECTOR) + await tutorial_3c_page.waitForTimeout(PAGE_WAIT * 2) + + await tutorial_3c_page.waitForFunction(() => { + let el = document.querySelector('#loading-spinner'); + return el == null || el.clientHeight === 0; + }, { timeout: TIMEOUT }); + + await tutorial_3c_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT * 10 }) + + console.log('Page opened successfully') + + }) + + + it('Create and Simulate network', async () => { + + await tutorial_3c_page.waitForTimeout(PAGE_WAIT * 2) + await tutorial_3c_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT }) + + console.log('Tutorial #3c') + + await tutorial_3c_page.waitForTimeout(PAGE_WAIT) + await tutorial_3c_page.waitForSelector(selectors.TUTORIALS_BUTTON_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3c_page.click(selectors.TUTORIALS_BUTTON_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3c_page.waitForSelector(selectors.TUTORIAL_3C_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3c_page.click(selectors.TUTORIAL_3C_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3c_page.waitForSelector(selectors.E_CELL_TYPE_SELECTOR) + await tutorial_3c_page.waitForSelector(selectors.I_CELL_TYPE_SELECTOR) + await tutorial_3c_page.waitForTimeout(PAGE_WAIT) + + await tutorial_3c_page.waitForSelector(selectors.MODEL_BUTTON_SELECTOR) + await tutorial_3c_page.click(selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await tutorial_3c_page.waitForSelector(selectors.CREATE_NETWORK_SELECTOR) + await tutorial_3c_page.click(selectors.CREATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + + console.log('Create network') + + await tutorial_3c_page.waitForTimeout(PAGE_WAIT * 3) + + await tutorial_3c_page.waitForSelector(selectors.THREE_D_REP_SELECTOR) + + console.log('... taking snapshot ...'); + await tutorial_3c_page.waitForTimeout(PAGE_WAIT); + expect(await tutorial_3c_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Tutorial#3c Network' + }); + + //there is a bug related to 'Model' > 'Simulate Network' + // await page.click( MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await tutorial_3c_page.waitForTimeout(PAGE_WAIT); + //reason why the tests are using the simulate button on the top right + await tutorial_3c_page.click(selectors.SIMULATE_TOP_RIGHT_BUTTON_SELECTOR, { timeout: TIMEOUT }); + // await page.click( SIMULATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + console.log('Simulate network') + + await tutorial_3c_page.waitForSelector(selectors.SIMULATION_PAGE_SELECTOR, { timeout: TIMEOUT * 2 }); + + await tutorial_3c_page.waitForSelector(selectors.RASTER_PLOT_SELECTOR, { timeout: TIMEOUT * 3 }) + + + }); + + + it('Connections Plot', async () => { + + await tutorial_3c_page.waitForTimeout(PAGE_WAIT * 2); + await tutorial_3c_page.waitForSelector(selectors.CONNECTIONS_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3c_page.click(selectors.CONNECTIONS_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3c_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Connections Plot ...') + await tutorial_3c_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_3c_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Connections Plot' + }); + + }); + + it('2D Net Plot', async () => { + await tutorial_3c_page.waitForSelector(selectors.TWO_D_NET_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3c_page.click(selectors.TWO_D_NET_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3c_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View 2D Net Plot ...') + await tutorial_3c_page.waitForTimeout(PAGE_WAIT * 3); + + console.log('... taking snapshot ...'); + expect(await tutorial_3c_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: '2D Net Plot' + }); + }); + + it('Cell Traces Plot', async () => { + await tutorial_3c_page.waitForSelector(selectors.CELL_TRACES_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3c_page.click(selectors.CELL_TRACES_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3c_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Cell Traces Plot ...') + await tutorial_3c_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_3c_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Cell Traces Plot' + }); + }); + + it('Raster Plot', async () => { + await tutorial_3c_page.waitForSelector(selectors.RASTER_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3c_page.click(selectors.RASTER_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3c_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Raster Plot ...') + await tutorial_3c_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_3c_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Raster Plot' + }); + }); + + it('Spike Hist Plot', async () => { + await tutorial_3c_page.waitForSelector(selectors.SPIKE_HIST_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3c_page.click(selectors.SPIKE_HIST_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3c_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Spike Hist Plot ...') + await tutorial_3c_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_3c_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Spike Hist Plot' + }); + }); + + it('LFP Time Series Plot', async () => { + await tutorial_3c_page.waitForSelector(selectors.LFP_TS_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3c_page.click(selectors.LFP_TS_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3c_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View LFP Time Series Plot ...') + await tutorial_3c_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_3c_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'LFP Time Series Plot' + }); + }); + + it('LFP PSD Plot', async () => { + await tutorial_3c_page.waitForSelector(selectors.LFP_PSD_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3c_page.click(selectors.LFP_PSD_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3c_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View LFP PSD Plot ...') + await tutorial_3c_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_3c_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'LFP PSD Plot' + }); + }); + + it('LFP Spectrogram Plot', async () => { + await tutorial_3c_page.waitForSelector(selectors.LFP_SPECTOGRAM_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3c_page.click(selectors.LFP_SPECTOGRAM_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3c_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View LFP Spectrogram Plot ...') + await tutorial_3c_page.waitForTimeout(PAGE_WAIT * 3); + + console.log('... taking snapshot ...'); + expect(await tutorial_3c_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'LFP Spectrogram Plot' + }); + }); + + it('Granger Plot', async () => { + await tutorial_3c_page.waitForSelector(selectors.GRANGER_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3c_page.click(selectors.GRANGER_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3c_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Granger Plot ...') + await tutorial_3c_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_3c_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Granger Plot' + }); + }); + + + it('Rate Spectogram Plot', async () => { + await tutorial_3c_page.waitForSelector(selectors.RATE_SPECTROGRAM_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3c_page.click(selectors.RATE_SPECTROGRAM_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_3c_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + + await tutorial_3c_page.waitForTimeout(PAGE_WAIT); + // await tutorial_3c_page.waitForSelector(selectors.CONNECTIONS_PLOT_SELECTOR, { timeout: TIMEOUT }) + // await tutorial_3c_page.click(selectors.CONNECTIONS_PLOT_SELECTOR, { timeout: TIMEOUT }) + // await tutorial_3c_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + + // await tutorial_3c_page.waitForTimeout(PAGE_WAIT); + + // await tutorial_3c_page.click(selectors.RATE_SPECTROGRAM_PLOT_SELECTOR, { timeout: TIMEOUT }) + // await tutorial_3c_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + + console.log('View Rate Spectogram Plot ...') + await tutorial_3c_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_3c_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Rate Spectogram Plot' + }); + }); + +}); \ No newline at end of file diff --git a/tests/frontend/e2e/tests/Tut#4_smoke.test.js b/tests/frontend/e2e/tests/Tut#4_smoke.test.js new file mode 100644 index 00000000..dc0a3051 --- /dev/null +++ b/tests/frontend/e2e/tests/Tut#4_smoke.test.js @@ -0,0 +1,265 @@ +//IMPORTS: +import 'expect-puppeteer'; +import puppeteer from 'puppeteer'; +import { click } from './utils'; +import { toMatchImageSnapshot } from 'jest-image-snapshot' +expect.extend({ toMatchImageSnapshot }) +const path = require('path'); +var scriptName = path.basename(__filename, '.js'); +import * as selectors from './selectors' + + +//PAGE INFO: +const baseURL = process.env.url || 'https://test.netpyne.metacell.us/' +const PAGE_WAIT = 3000; +const TIMEOUT = 60000; + +//SNAPSHOT: +const SNAPSHOT_OPTIONS = { + customSnapshotsDir: `./tests/snapshots/${scriptName}`, + comparisonMethod: 'ssim', + failureThresholdType: 'percent', + failureThreshold: 0.5 +}; + + +let r = (Math.random() + 1).toString(36).substring(2); + +//USERS: +const USERNAME = `TestUser${r}` +const PASSWORD = 'testpassword' + + +//TESTS: + +jest.setTimeout(3000000); +let browser4; +let tutorial_4_page; + + +describe('Tutorial #4 for Smoke Testing', () => { + + beforeAll(async () => { + browser4 = await puppeteer.launch( + { + headless: 'new', + args: ['--no-sandbox', '--disable-setuid-sandbox'], + defaultViewport: { + width: 1300, + height: 1024 + }, + } + ); + tutorial_4_page = await browser4.newPage(); + await tutorial_4_page.goto(baseURL); + if (baseURL.includes('test.netpyne.metacell.us')) { + console.log('Logging in as test user ...') + await tutorial_4_page.waitForSelector(selectors.LOGIN_PAGE_SELECTOR); + await tutorial_4_page.waitForSelector(selectors.USERNAME_SELECTOR) + await expect(tutorial_4_page) + .toFill(selectors.USERNAME_SELECTOR, USERNAME, { timeout: TIMEOUT }); + + await tutorial_4_page.waitForSelector(selectors.PASSWORD_SELECTOR) + await expect(tutorial_4_page) + .toFill(selectors.PASSWORD_SELECTOR, PASSWORD, { timeout: TIMEOUT }); + + await tutorial_4_page.click(selectors.LOGIN_BUTTON_SELECTOR) + // Wait for initial loading spinner to disappear + await tutorial_4_page.waitForFunction(() => { + let el = document.querySelector('#loading-spinner'); + return el == null || el.clientHeight === 0; + }, { timeout: TIMEOUT }); + console.log('Logged in successfully') + } + }); + + afterAll(async () => { + // Close the browser instance after all tests have run + await browser4.close(); + }); + + it('Open new page', async () => { + + console.log('Opening a new NetPyNE page') + + await tutorial_4_page.on("dialog", dialog => + dialog.accept()); + + await tutorial_4_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT * 6, visible: true }) + await tutorial_4_page.waitForSelector(selectors.FILE_TAB_SELECTOR, { timeout: PAGE_WAIT * 3 }) + await tutorial_4_page.waitForTimeout(PAGE_WAIT) + await tutorial_4_page.click(selectors.FILE_TAB_SELECTOR) + await tutorial_4_page.waitForSelector(selectors.NEW_FILE_SELECTOR, { timeout: PAGE_WAIT * 3 }) + await tutorial_4_page.waitForTimeout(PAGE_WAIT) + await tutorial_4_page.click(selectors.NEW_FILE_SELECTOR) + await tutorial_4_page.waitForTimeout(PAGE_WAIT) + await tutorial_4_page.waitForSelector(selectors.CONFIRM_NEW_PAGE_SELECTOR) + await tutorial_4_page.click(selectors.CONFIRM_NEW_PAGE_SELECTOR) + await tutorial_4_page.waitForTimeout(PAGE_WAIT * 2) + + await tutorial_4_page.waitForFunction(() => { + let el = document.querySelector('#loading-spinner'); + return el == null || el.clientHeight === 0; + }, { timeout: TIMEOUT }); + + await tutorial_4_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT * 10 }) + + console.log('Page opened successfully') + + }) + + + it('Create and Simulate network', async () => { + + await tutorial_4_page.waitForTimeout(PAGE_WAIT * 2) + await tutorial_4_page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT }) + + console.log('Tutorial #4') + + await tutorial_4_page.waitForTimeout(PAGE_WAIT) + await tutorial_4_page.waitForSelector(selectors.TUTORIALS_BUTTON_SELECTOR, { timeout: TIMEOUT }) + await tutorial_4_page.click(selectors.TUTORIALS_BUTTON_SELECTOR, { timeout: TIMEOUT }) + await tutorial_4_page.waitForSelector(selectors.TUTORIAL_4_SELECTOR, { timeout: TIMEOUT }) + await tutorial_4_page.click(selectors.TUTORIAL_4_SELECTOR, { timeout: TIMEOUT }) + await tutorial_4_page.waitForSelector(selectors.PYR_2_CELL_SELECTOR) + await tutorial_4_page.waitForTimeout(PAGE_WAIT) + + await tutorial_4_page.waitForSelector(selectors.MODEL_BUTTON_SELECTOR) + await tutorial_4_page.click(selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await tutorial_4_page.waitForSelector(selectors.CREATE_NETWORK_SELECTOR) + await tutorial_4_page.click(selectors.CREATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + + console.log('Create network') + + await tutorial_4_page.waitForTimeout(PAGE_WAIT * 3) + + await tutorial_4_page.waitForSelector(selectors.THREE_D_REP_SELECTOR) + + console.log('... taking snapshot ...'); + await tutorial_4_page.waitForTimeout(PAGE_WAIT); + expect(await tutorial_4_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Tutorial#4 Network' + }); + await tutorial_4_page.waitForSelector(selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await tutorial_4_page.click(selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT }); + await tutorial_4_page.waitForSelector(selectors.SIMULATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + await tutorial_4_page.click(selectors.SIMULATE_NETWORK_SELECTOR, { timeout: TIMEOUT }); + + console.log('Simulate network') + + await tutorial_4_page.waitForSelector(selectors.SIMULATION_PAGE_SELECTOR, { timeout: TIMEOUT * 2 }); + + await tutorial_4_page.waitForSelector(selectors.RASTER_PLOT_SELECTOR, { timeout: TIMEOUT * 3 }) + + + }); + + + it('Connections Plot', async () => { + + await tutorial_4_page.waitForTimeout(PAGE_WAIT * 2); + await tutorial_4_page.waitForSelector(selectors.CONNECTIONS_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_4_page.click(selectors.CONNECTIONS_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_4_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Connections Plot ...') + await tutorial_4_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_4_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Connections Plot' + }); + + }); + + it('2D Net Plot', async () => { + await tutorial_4_page.waitForSelector(selectors.TWO_D_NET_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_4_page.click(selectors.TWO_D_NET_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_4_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View 2D Net Plot ...') + await tutorial_4_page.waitForTimeout(PAGE_WAIT * 3); + + console.log('... taking snapshot ...'); + expect(await tutorial_4_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: '2D Net Plot' + }); + }); + + it('Cell Traces Plot', async () => { + await tutorial_4_page.waitForSelector(selectors.CELL_TRACES_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_4_page.click(selectors.CELL_TRACES_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_4_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Cell Traces Plot ...') + await tutorial_4_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_4_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Cell Traces Plot' + }); + }); + + it('Raster Plot', async () => { + await tutorial_4_page.waitForSelector(selectors.RASTER_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_4_page.click(selectors.RASTER_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_4_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Raster Plot ...') + await tutorial_4_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_4_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Raster Plot' + }); + }); + + it('Spike Hist Plot', async () => { + await tutorial_4_page.waitForSelector(selectors.SPIKE_HIST_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_4_page.click(selectors.SPIKE_HIST_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_4_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + console.log('View Spike Hist Plot ...') + await tutorial_4_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_4_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Spike Hist Plot' + }); + }); + + + it('Rate Spectogram Plot', async () => { + await tutorial_4_page.waitForSelector(selectors.RATE_SPECTROGRAM_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_4_page.click(selectors.RATE_SPECTROGRAM_PLOT_SELECTOR, { timeout: TIMEOUT }) + await tutorial_4_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + + // await tutorial_4_page.waitForTimeout(PAGE_WAIT); + // await tutorial_4_page.waitForSelector(selectors.CONNECTIONS_PLOT_SELECTOR, { timeout: TIMEOUT }) + // await tutorial_4_page.click(selectors.CONNECTIONS_PLOT_SELECTOR, { timeout: TIMEOUT }) + // await tutorial_4_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + + await tutorial_4_page.waitForTimeout(PAGE_WAIT); + + // await tutorial_4_page.click(selectors.RATE_SPECTROGRAM_PLOT_SELECTOR, { timeout: TIMEOUT }) + // await tutorial_4_page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT }) + + console.log('View Rate Spectogram Plot ...') + await tutorial_4_page.waitForTimeout(PAGE_WAIT); + + console.log('... taking snapshot ...'); + expect(await tutorial_4_page.screenshot()) + .toMatchImageSnapshot({ + ...SNAPSHOT_OPTIONS, + customSnapshotIdentifier: 'Rate Spectogram Plot' + }); + }); + +}); \ No newline at end of file diff --git a/tests/frontend/e2e/tests/selectors.js b/tests/frontend/e2e/tests/selectors.js new file mode 100644 index 00000000..ad70c467 --- /dev/null +++ b/tests/frontend/e2e/tests/selectors.js @@ -0,0 +1,106 @@ + +export const BASE_PAGE_SELECTOR = '.NetPyNE-root-1' +export const TUTORIALS_BUTTON_SELECTOR = 'button[id = "Examples"]' +export const MODEL_BUTTON_SELECTOR = 'button[id="Model"]' +export const CREATE_NETWORK_SELECTOR = 'li[id="Create network"]' +export const CREATE_AND_SIMULATE_NETWORK_SELECTOR = 'li[id="Create and simulate network"]' +export const SIMULATE_NETWORK_SELECTOR = 'li[id="Simulate network"]' +export const SIMULATE_TOP_RIGHT_BUTTON_SELECTOR = 'div[class="MuiButtonGroup-root MuiButtonGroup-contained"]' +export const SIMULATION_PAGE_SELECTOR = 'canvas' +export const CONNECTIONS_PLOT_SELECTOR = 'div[title=\"Connections Plot\"][role=button]' +export const LOGIN_PAGE_SELECTOR = '#login-main'; +export const USERNAME_SELECTOR = '#username_input'; +export const PASSWORD_SELECTOR = '#password_input'; +export const LOGIN_BUTTON_SELECTOR = '#login_submit'; +export const SELECT_CELL_BUTTON_SELECTOR = '#selectCellButton'; +export const TUTORIAL_1_SELECTOR = "li[id='Tut 1: Simple cell network']"; +export const TUTORIAL_2_SELECTOR = "li[id='Tut 2: Detailed cell network']" +export const TUTORIAL_3A_SELECTOR = "li[id='Tut 3a: Multiscale network (low IP3)']" +export const TUTORIAL_3B_SELECTOR = "li[id='Tut 3b: Multiscale network (high IP3)']" +export const TUTORIAL_3C_SELECTOR = "li[id='Tut 3c: Multiscale network (no RxD)']" +export const TUTORIAL_4_SELECTOR = "li[id='Tut 4: Simple oscillatory network']" +export const PYR_CELL_SELECTOR = '#pyr'; +export const PYR_2_CELL_SELECTOR = '#PYR' +export const INT_CELL_SELECTOR = '#INT' +export const E_CELL_TYPE_SELECTOR = '#E' +export const I_CELL_TYPE_SELECTOR = '#I' +export const CONFIGURATION_TAB_SELECTOR = 'div[title="Configuration"]'; +export const RECORDING_CONFIGURATION_TAB_SELECTOR = '#configRecord'; +export const TRACES_TO_RECORD_SELECTOR = `div[title="Dict of traces to record (default: {} ; example: {'V_soma': {'sec':'soma','loc':0.5,'var':'v'} })."]`; +export const DIPOLE_LFPYKIT_SELECTOR = `#simConfigrecordDipole`; +export const DISABLED_EEG_PLOT_SELECTOR = 'div[title="EEG plot"][aria-disabled="true"]'; +export const DISABLED_DIPOLE_PLOT_SELECTOR = 'div[title="Dipole plot"][aria-disabled="true"]'; +export const SIMULATE_BUTTON_SELECTOR = 'div[class="MuiButtonGroup-root MuiButtonGroup-contained"]'; +export const RASTER_PLOT_SELECTOR = 'div[title="Raster plot"][aria-disabled="false"]'; +export const EEG_PLOT_SELECTOR = 'div[title="EEG plot"][aria-disabled="false"]'; +export const DIPOLE_PLOT_SELECTOR = 'div[title="Dipole plot"][aria-disabled="false"]'; +export const GRANGER_PLOT_SELECTOR = 'div[title=\"Granger Plot\"][role=button]' +export const TWO_D_NET_PLOT_SELECTOR = 'div[title=\"2D Net Plot\"][role=button]' +export const CELL_TRACES_PLOT_SELECTOR = 'div[title=\"Cell traces\"][role=button]' +export const SPIKE_HIST_PLOT_SELECTOR = 'div[title=\"Spike Hist Plot\"][role=button]' +export const RATE_SPECTROGRAM_PLOT_SELECTOR = 'div[title=\"Rate Spectrogram Plot\"][role=button]' +export const RXD_CONCENTRATION_PLOT_SELECTOR = 'div[title=\"RxD concentration plot\"][role=button]' +export const LFP_TS_PLOT_SELECTOR = 'div[title=\"LFP Time Series Plot\"][role=button]' +export const LFP_PSD_PLOT_SELECTOR = 'div[title=\"LFP PSD Plot\"][role=button]' +export const LFP_SPECTOGRAM_PLOT_SELECTOR = 'div[title=\"LFP Spectrogram Plot\"][role=button]' +export const CANVAS_SELECTOR = 'canvas'; +export const THREE_D_REP_SELECTOR = 'div[title="3D Representation"][aria-disabled="false"]' +export const DISABLED_RASTER_PLOT_SELECTOR = 'div[title="Raster plot"][aria-disabled="true"]' +export const EXPERIMENT_MANAGER_TAB_SELECTOR = 'div[title="Experiment Manager"]' +export const CREATE_NEW_EXPERIMENT_SELECTOR = 'button[class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary"]' +export const CREATE_NEW_EXPERIMENT_POPUP_SELECTOR = 'h2[class="MuiTypography-root MuiTypography-h6"]' +export const CONFIRM_SELECTOR = '#confirmDeletion' +export const EXPERIMENT_NAME_SELECTOR = '#experiment-name' +export const PARAMETER_SELECTION_SELECTOR = '#undefined-combo-box-demo' +export const FROM_VALUE_SELECTOR = '#undefined-from' +export const TO_VALUE_SELECTOR = '#undefined-to' +export const STEP_VALUE_SELECTOR = '#undefined-step' +export const CREATE_EXPERIMENT_BUTTON_SELECTOR = 'button[class="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary"]' +export const EXPERIMENT_TABLE_HEADER_SELECTOR = 'th[class="MuiTableCell-root MuiTableCell-body"]' +// export const SIMULATE_POPUP_SELECTOR = 'div[class="MuiBox-root MuiBox-root-185 wrap"]' +export const SIMULATE_POPUP_SELECTOR = '.MuiDialogContent-root > .MuiBox-root.custom-radio > :nth-child(2) > div' + +export const CONFIRM_SIMULATE_SELECTOR = '#appBarPerformActionButton' +export const CONFIRM_EXPERIMENT_STARTED_SELECTOR = 'button[class="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary"]' +// export const SIMULATION_LOADER_SELECTOR = 'div[class = "MuiBox-root MuiBox-root-186 MuiChip-icon MuiChipLoader"]' +export const SIMULATION_LOADER_SELECTOR = '.MuiTableCell-root.MuiTableCell-body.experimentTableCell.MuiTableCell-alignLeft > div > .MuiChipLoader ' +export const BACK_TO_EDIT_SELECTOR = 'span[class="MuiButton-startIcon MuiButton-iconSizeMedium"]' +export const CELL_TYPES_TAB_SELECTOR = 'div[title="Cell Types"]' +export const EXPERIMENT_TABLE_SELECTOR = 'table[class="MuiTable-root"]' +export const CREATED_EXPERIMENT_SELECTOR = 'button[class="MuiButtonBase-root MuiButton-root MuiButton-text"]' +export const EXPERIMENT_CONDIIONS_ROW_SELECTOR = 'tr[class = "MuiTableRow-root MuiTableRow-head"]' +export const EDIT_EXPERIMENT_BACK_SELECTOR = '.editExperimentBack > svg' +export const INDIVIDUAL_EXPERIMENT_ROW_SELECTOR = 'tr[class="MuiTableRow-root"]' +export const FILE_TAB_SELECTOR = '#File' +export const NEW_FILE_SELECTOR = '#New' +export const CONFIRM_NEW_PAGE_SELECTOR = '#appBarPerformActionButton' +export const CONTROL_PANEL_TAB_SELECTOR = 'div[title="Control Panel"]' +export const NETWORKS_IN_CONTROL_PANEL_SELECTOR = 'ul[role="tree"]' +export const NETWORK_ITEMS_CONTROL_PANEL_SELECTOR = 'li[role="treeitem"]' +export const COLOR_CONTROL_BUTTONS_SELECTOR = 'button[class="MuiButtonBase-root MuiIconButton-root"]' +export const COLOR_RECT_SELECTOR = 'rect[rx="5"]' +export const CONTROL_PANEL_NETWORK_ROWS_SELECTOR = 'div[class = "MuiTypography-root MuiTreeItem-label MuiTypography-body1"]' +export const CONTROL_PANEL_TABLE_SELECTOR = 'div[class="MuiGrid-root MuiGrid-container MuiGrid-justify-content-xs-space-between"]' +export const CONTROL_PANEL_FILTER_SELECTOR = 'input[class="MuiInputBase-input MuiOutlinedInput-input"]' +export const FILE_SYSTEM_SELECTOR = '.ReactVirtualized__Grid__innerScrollContainer' +export const LEVEL_UP_SELECTOR ='.fa-level-up' +export const FOLDERS_SELECTOR ='div[class = "rst__rowContents rst__rowContentsDragDisabled"]' +export const SELECT_BUTTON_SELECTOR ='#browserAccept' +export const E_RULE_SELECTOR ='#Erule' +export const NETWORK_CREATION_MENU_BUTTON_SELECTOR ='button[aria-label="select merge strategy"]' +export const NETWORK_CREATION_MENU_ITEMS_SELECTOR ='#split-button-menu > li' +export const NETWORK_CREATION_BUTTON_SELECTOR ='div[aria-label="split button"]' +export const POPULATIONS_TAB_SELECTOR ='div[title="Populations"]' +export const SAVE_MENU_SELECTOR ='h2[class="MuiTypography-root MuiTypography-h6"]' +export const PATH_INPUT_SELECTOR ='input[class="MuiInputBase-input MuiFilledInput-input MuiInputBase-inputAdornedStart MuiFilledInput-inputAdornedStart"]' +export const SAVE_BUTTON_SELECTOR ='#appBarPerformActionButton' +export const EXPORT_OPTIONS_SELECTOR ='ul[class="MuiList-root MuiList-padding"]' +export const CHECKBOX_OPTION_SELECTOR ='input[type="checkbox"]' +export const PYTHON_CONSOLE_TAB_SELECTOR ='div[title="Python"]' +export const PYTHON_CONSLE_SELECTOR ='#pythonConsoleOutput' +export const PYTHON_CONSOLE_FRAME_SELECTOR ='#pythonConsoleFrame' +export const MAIN_PYTHON_APP_SELECTOR ='#ipython-main-app' +export const PYTHON_CELL_SELECTOR ='div.inner_cell' +export const PYTHON_OUTPUT_SELECTOR ='div[class="output_subarea output_text output_stream output_stdout"]' +export const PYTHON_FIRST_OUTPUT_SELECTOR ='div[class="output_subarea output_text output_result"]' + diff --git a/tests/frontend/e2e/tests/snapshots/EEG_and_Dipole_Tut#1.test/Dipole Plot-snap.png b/tests/frontend/e2e/tests/snapshots/EEG_and_Dipole_Tut#1.test/Dipole Plot-snap.png new file mode 100644 index 00000000..e3106138 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/EEG_and_Dipole_Tut#1.test/Dipole Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/EEG_and_Dipole_Tut#1.test/EEG Plot-snap.png b/tests/frontend/e2e/tests/snapshots/EEG_and_Dipole_Tut#1.test/EEG Plot-snap.png new file mode 100644 index 00000000..28eca622 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/EEG_and_Dipole_Tut#1.test/EEG Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/EEG_and_Dipole_Tut#1.test/Tutorial#1 Network-snap.png b/tests/frontend/e2e/tests/snapshots/EEG_and_Dipole_Tut#1.test/Tutorial#1 Network-snap.png new file mode 100644 index 00000000..8d3a430b Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/EEG_and_Dipole_Tut#1.test/Tutorial#1 Network-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/ExperimentManager_Tut#1.test/Experiment Condition #1-snap.png b/tests/frontend/e2e/tests/snapshots/ExperimentManager_Tut#1.test/Experiment Condition #1-snap.png new file mode 100644 index 00000000..deb08a25 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/ExperimentManager_Tut#1.test/Experiment Condition #1-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/ExperimentManager_Tut#1.test/Experiment Condition #2-snap.png b/tests/frontend/e2e/tests/snapshots/ExperimentManager_Tut#1.test/Experiment Condition #2-snap.png new file mode 100644 index 00000000..4ce58a0c Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/ExperimentManager_Tut#1.test/Experiment Condition #2-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/ExperimentManager_Tut#1.test/Experiment Condition #3-snap.png b/tests/frontend/e2e/tests/snapshots/ExperimentManager_Tut#1.test/Experiment Condition #3-snap.png new file mode 100644 index 00000000..3bfab13f Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/ExperimentManager_Tut#1.test/Experiment Condition #3-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/ExperimentManager_Tut#1.test/Tutorial#1 Network-snap.png b/tests/frontend/e2e/tests/snapshots/ExperimentManager_Tut#1.test/Tutorial#1 Network-snap.png new file mode 100644 index 00000000..5c0866e6 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/ExperimentManager_Tut#1.test/Tutorial#1 Network-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/RxD.test/LFP PSD Plot After change-snap.png b/tests/frontend/e2e/tests/snapshots/RxD.test/LFP PSD Plot After change-snap.png new file mode 100644 index 00000000..f7c967fd Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/RxD.test/LFP PSD Plot After change-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/RxD.test/LFP PSD Plot Before change-snap.png b/tests/frontend/e2e/tests/snapshots/RxD.test/LFP PSD Plot Before change-snap.png new file mode 100644 index 00000000..75959d0d Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/RxD.test/LFP PSD Plot Before change-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/RxD.test/LFP Time Series Plot After change-snap.png b/tests/frontend/e2e/tests/snapshots/RxD.test/LFP Time Series Plot After change-snap.png new file mode 100644 index 00000000..56fe6ff6 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/RxD.test/LFP Time Series Plot After change-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/RxD.test/LFP Time Series Plot Before change-snap.png b/tests/frontend/e2e/tests/snapshots/RxD.test/LFP Time Series Plot Before change-snap.png new file mode 100644 index 00000000..2ec0be73 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/RxD.test/LFP Time Series Plot Before change-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/RxD.test/RxD Plot-snap.png b/tests/frontend/e2e/tests/snapshots/RxD.test/RxD Plot-snap.png new file mode 100644 index 00000000..93173120 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/RxD.test/RxD Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/SaveOpenFile.test/Edited NetClamp Model-snap.png b/tests/frontend/e2e/tests/snapshots/SaveOpenFile.test/Edited NetClamp Model-snap.png new file mode 100644 index 00000000..595eda92 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/SaveOpenFile.test/Edited NetClamp Model-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/SaveOpenFile.test/NetClamp Model-snap.png b/tests/frontend/e2e/tests/snapshots/SaveOpenFile.test/NetClamp Model-snap.png new file mode 100644 index 00000000..c6b23287 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/SaveOpenFile.test/NetClamp Model-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#1_smoke.test/2D Net Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#1_smoke.test/2D Net Plot-snap.png new file mode 100644 index 00000000..67d65a70 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#1_smoke.test/2D Net Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#1_smoke.test/Cell Traces Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#1_smoke.test/Cell Traces Plot-snap.png new file mode 100644 index 00000000..48e88e16 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#1_smoke.test/Cell Traces Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#1_smoke.test/Connections Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#1_smoke.test/Connections Plot-snap.png new file mode 100644 index 00000000..82877967 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#1_smoke.test/Connections Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#1_smoke.test/Granger Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#1_smoke.test/Granger Plot-snap.png new file mode 100644 index 00000000..14995c50 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#1_smoke.test/Granger Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#1_smoke.test/Raster Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#1_smoke.test/Raster Plot-snap.png new file mode 100644 index 00000000..2723a956 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#1_smoke.test/Raster Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#1_smoke.test/Rate Spectogram Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#1_smoke.test/Rate Spectogram Plot-snap.png new file mode 100644 index 00000000..7e0818c0 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#1_smoke.test/Rate Spectogram Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#1_smoke.test/Spike Hist Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#1_smoke.test/Spike Hist Plot-snap.png new file mode 100644 index 00000000..c689d4eb Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#1_smoke.test/Spike Hist Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#1_smoke.test/Tutorial#1 Network-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#1_smoke.test/Tutorial#1 Network-snap.png new file mode 100644 index 00000000..ab99e4f9 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#1_smoke.test/Tutorial#1 Network-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#2_smoke.test/2D Net Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#2_smoke.test/2D Net Plot-snap.png new file mode 100644 index 00000000..6b094e2c Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#2_smoke.test/2D Net Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#2_smoke.test/Cell Traces Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#2_smoke.test/Cell Traces Plot-snap.png new file mode 100644 index 00000000..875710e4 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#2_smoke.test/Cell Traces Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#2_smoke.test/Connections Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#2_smoke.test/Connections Plot-snap.png new file mode 100644 index 00000000..3bf81c52 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#2_smoke.test/Connections Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#2_smoke.test/Granger Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#2_smoke.test/Granger Plot-snap.png new file mode 100644 index 00000000..6fe20f99 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#2_smoke.test/Granger Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#2_smoke.test/Raster Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#2_smoke.test/Raster Plot-snap.png new file mode 100644 index 00000000..98d7cd32 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#2_smoke.test/Raster Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#2_smoke.test/Rate Spectogram Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#2_smoke.test/Rate Spectogram Plot-snap.png new file mode 100644 index 00000000..6d0f95ef Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#2_smoke.test/Rate Spectogram Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#2_smoke.test/Spike Hist Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#2_smoke.test/Spike Hist Plot-snap.png new file mode 100644 index 00000000..a3dd942d Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#2_smoke.test/Spike Hist Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#2_smoke.test/Tutorial#2 Network-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#2_smoke.test/Tutorial#2 Network-snap.png new file mode 100644 index 00000000..24203ab7 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#2_smoke.test/Tutorial#2 Network-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/2D Net Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/2D Net Plot-snap.png new file mode 100644 index 00000000..9c6b3f25 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/2D Net Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/Cell Traces Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/Cell Traces Plot-snap.png new file mode 100644 index 00000000..031990f6 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/Cell Traces Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/Connections Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/Connections Plot-snap.png new file mode 100644 index 00000000..8f51ba6d Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/Connections Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/Granger Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/Granger Plot-snap.png new file mode 100644 index 00000000..fc53d01e Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/Granger Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/LFP PSD Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/LFP PSD Plot-snap.png new file mode 100644 index 00000000..004c57d2 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/LFP PSD Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/LFP Spectrogram Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/LFP Spectrogram Plot-snap.png new file mode 100644 index 00000000..6c5af449 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/LFP Spectrogram Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/LFP Time Series Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/LFP Time Series Plot-snap.png new file mode 100644 index 00000000..cbc26a40 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/LFP Time Series Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/Raster Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/Raster Plot-snap.png new file mode 100644 index 00000000..1bebb198 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/Raster Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/Rate Spectogram Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/Rate Spectogram Plot-snap.png new file mode 100644 index 00000000..c80bfee6 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/Rate Spectogram Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/RxD concentration plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/RxD concentration plot-snap.png new file mode 100644 index 00000000..3460ad8c Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/RxD concentration plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/Spike Hist Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/Spike Hist Plot-snap.png new file mode 100644 index 00000000..b4dd0ca1 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/Spike Hist Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/Tutorial#3a Network-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/Tutorial#3a Network-snap.png new file mode 100644 index 00000000..c8729805 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3a_smoke.test/Tutorial#3a Network-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/2D Net Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/2D Net Plot-snap.png new file mode 100644 index 00000000..9c6b3f25 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/2D Net Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/Cell Traces Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/Cell Traces Plot-snap.png new file mode 100644 index 00000000..52010398 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/Cell Traces Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/Connections Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/Connections Plot-snap.png new file mode 100644 index 00000000..8f51ba6d Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/Connections Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/Granger Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/Granger Plot-snap.png new file mode 100644 index 00000000..c5f54ed0 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/Granger Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/LFP PSD Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/LFP PSD Plot-snap.png new file mode 100644 index 00000000..68543f5c Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/LFP PSD Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/LFP Spectrogram Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/LFP Spectrogram Plot-snap.png new file mode 100644 index 00000000..dfa394bc Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/LFP Spectrogram Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/LFP Time Series Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/LFP Time Series Plot-snap.png new file mode 100644 index 00000000..19c9c018 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/LFP Time Series Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/Raster Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/Raster Plot-snap.png new file mode 100644 index 00000000..6097f96c Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/Raster Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/Rate Spectogram Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/Rate Spectogram Plot-snap.png new file mode 100644 index 00000000..4297501b Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/Rate Spectogram Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/RxD concentration plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/RxD concentration plot-snap.png new file mode 100644 index 00000000..0e1680df Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/RxD concentration plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/Spike Hist Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/Spike Hist Plot-snap.png new file mode 100644 index 00000000..dd5177f9 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/Spike Hist Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/Tutorial#3b Network-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/Tutorial#3b Network-snap.png new file mode 100644 index 00000000..c8729805 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3b_smoke.test/Tutorial#3b Network-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/2D Net Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/2D Net Plot-snap.png new file mode 100644 index 00000000..2c7d45c8 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/2D Net Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/Cell Traces Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/Cell Traces Plot-snap.png new file mode 100644 index 00000000..03021bcf Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/Cell Traces Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/Connections Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/Connections Plot-snap.png new file mode 100644 index 00000000..43cc014c Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/Connections Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/Granger Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/Granger Plot-snap.png new file mode 100644 index 00000000..02833764 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/Granger Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/LFP PSD Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/LFP PSD Plot-snap.png new file mode 100644 index 00000000..2bd8ead4 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/LFP PSD Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/LFP Spectrogram Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/LFP Spectrogram Plot-snap.png new file mode 100644 index 00000000..a1570f0b Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/LFP Spectrogram Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/LFP Time Series Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/LFP Time Series Plot-snap.png new file mode 100644 index 00000000..b504f66f Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/LFP Time Series Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/Raster Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/Raster Plot-snap.png new file mode 100644 index 00000000..615f10b8 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/Raster Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/Rate Spectogram Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/Rate Spectogram Plot-snap.png new file mode 100644 index 00000000..fac79474 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/Rate Spectogram Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/Spike Hist Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/Spike Hist Plot-snap.png new file mode 100644 index 00000000..6f33062c Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/Spike Hist Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/Tutorial#3c Network-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/Tutorial#3c Network-snap.png new file mode 100644 index 00000000..894e4e8b Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#3c_smoke.test/Tutorial#3c Network-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#4_smoke.test/2D Net Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#4_smoke.test/2D Net Plot-snap.png new file mode 100644 index 00000000..6f208a9b Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#4_smoke.test/2D Net Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#4_smoke.test/Cell Traces Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#4_smoke.test/Cell Traces Plot-snap.png new file mode 100644 index 00000000..d0e11cbb Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#4_smoke.test/Cell Traces Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#4_smoke.test/Connections Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#4_smoke.test/Connections Plot-snap.png new file mode 100644 index 00000000..d5cdb076 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#4_smoke.test/Connections Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#4_smoke.test/Raster Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#4_smoke.test/Raster Plot-snap.png new file mode 100644 index 00000000..b304fc09 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#4_smoke.test/Raster Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#4_smoke.test/Rate Spectogram Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#4_smoke.test/Rate Spectogram Plot-snap.png new file mode 100644 index 00000000..3eb56a2c Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#4_smoke.test/Rate Spectogram Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#4_smoke.test/Spike Hist Plot-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#4_smoke.test/Spike Hist Plot-snap.png new file mode 100644 index 00000000..1709b831 Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#4_smoke.test/Spike Hist Plot-snap.png differ diff --git a/tests/frontend/e2e/tests/snapshots/Tut#4_smoke.test/Tutorial#4 Network-snap.png b/tests/frontend/e2e/tests/snapshots/Tut#4_smoke.test/Tutorial#4 Network-snap.png new file mode 100644 index 00000000..55eeb91e Binary files /dev/null and b/tests/frontend/e2e/tests/snapshots/Tut#4_smoke.test/Tutorial#4 Network-snap.png differ diff --git a/utilities/install.py b/utilities/install.py index 8075fb79..1830adc0 100644 --- a/utilities/install.py +++ b/utilities/install.py @@ -13,13 +13,16 @@ PYGEPPETTO = 'https://github.com/openworm/pygeppetto.git' NETPYNE = 'https://github.com/Neurosim-lab/netpyne.git' WORKSPACE = 'https://github.com/Neurosim-lab/netpyne_workspace' +META = 'https://github.com/MetaCell/geppetto-meta/' ROOT_DIR = os.path.join(HERE, os.pardir) DEPS_DIR = os.path.join(ROOT_DIR, 'src') WEBAPP_DIR = os.path.join(ROOT_DIR, 'webapp') JUPYTER_DIR = 'jupyter-geppetto' +PYGEPPETTO_DIR = 'pygeppetto' NETPYNE_DIR = 'netpyne' +META_DIR = 'geppetto-meta' WORKSPACE_DIR = 'workspace' @@ -34,7 +37,7 @@ def cprint(string): def execute(cmd, cwd='.', *args, **kwargs): exit_code = subprocess.call(cmd, cwd=cwd, *args, **kwargs) if exit_code != 0: - raise SystemExit('Error installing NetPyNE-UI') + raise SystemExit(f'Error installing NetPyNE-UI - Command {cmd} failed with code {exit_code} in directory {cwd}') # by default clones branch (which can be passed as a parameter python install.py branch test_branch) @@ -46,13 +49,22 @@ def clone(repository, folder=None, branch_or_tag=None, cwdp=DEPS_DIR, recursive= if folder and os.path.exists(os.path.join(cwdp, folder)): print(f'Skipping clone of {repository}: folder exists') else: + exit_code = 0 if recursive: - subprocess.call(['git', 'clone', '--recursive', repository], cwd=cwdp) + exit_code = subprocess.call(['git', 'clone', '--recursive', repository], cwd=cwdp) else: if folder: - subprocess.call(['git', 'clone', repository, folder], cwd=cwdp) + exit_code = subprocess.call(['git', 'clone', repository, folder], cwd=cwdp) else: - subprocess.call(['git', 'clone', repository], cwd=cwdp) + exit_code = subprocess.call(['git', 'clone', repository], cwd=cwdp) + + if exit_code != 0: + raise SystemExit(f'Failed to clone repository {repository} into {folder}') + + if not os.path.exists(os.path.join(cwdp, folder, '.git')): + print(f'Skipping checkout of {repository}: folder is not a git repository') + return + if branch_or_tag: checkout(folder, branch_or_tag, cwdp) @@ -63,7 +75,9 @@ def checkout(folder, branch_or_tag, cwdp): print(f'Checking out {branch_or_tag}') try: + subprocess.call(['git', 'fetch'], cwd=newPath) subprocess.call(['git', 'checkout', branch_or_tag], cwd=newPath) + subprocess.call(['git', 'pull', 'origin', branch_or_tag], cwd=newPath) except Exception as e: logging.error('Cannot checkout branch or tag %s on %s', branch_or_tag, folder, exc_info=True) @@ -72,57 +86,54 @@ def compile_mod(): execute(['nrnivmodl', os.path.join(WORKSPACE_DIR, 'mod')], cwd=ROOT_DIR) -def main(netpyne_branch, workspace_branch, pygeppetto_branch=None, jupyter_geppetto_branch=None, skipNpm=False, - skipTest=False, development=False): +def main(netpyne_branch, workspace_branch, geppetto_branch=None, skipNpm=False, + skipTest=False, development=False): cprint("Installing requirements") execute(cmd=['pip', 'install', '-r', 'requirements.txt'], cwd=ROOT_DIR) + cprint("Installing UI python package...") + execute(cmd=['pip', 'install', '-e', '.', '--no-deps'], cwd=ROOT_DIR) if not os.path.exists(DEPS_DIR): os.mkdir(DEPS_DIR) - - if development: + if geppetto_branch: + if geppetto_branch.replace(" ", "") is '': + geppetto_branch = 'development' + os.chdir(DEPS_DIR) + cprint("Installing geppetto-meta") + clone(repository=META, folder=META_DIR, branch_or_tag=geppetto_branch) + # installing pygeppetto + cprint("Installing pygeppetto") + execute(cmd=['pip', 'install', '-e', '.'], cwd=os.path.join(DEPS_DIR, META_DIR, PYGEPPETTO_DIR)) + # installing jupyter geppetto + cprint("Installing jupyter geppetto") + execute(cmd=['pip', 'install', '-e', '.'], cwd=os.path.join(DEPS_DIR, META_DIR, JUPYTER_DIR)) + # installing core dependencies + execute(cmd=['pip', 'install', '-e', '.'], cwd=ROOT_DIR) + if netpyne_branch: + if netpyne_branch.replace(" ", "") is '': + netpyne_branch = 'development' os.chdir(DEPS_DIR) - cprint("Installing netpyne") clone(repository=NETPYNE, branch_or_tag=netpyne_branch) execute(cmd=['pip', 'install', '-e', '.'], cwd=os.path.join(DEPS_DIR, NETPYNE_DIR)) - # install pygeppetto - cprint("Installing pygeppetto") - clone(repository=PYGEPPETTO, - folder='pygeppetto', - branch_or_tag=pygeppetto_branch - ) - execute(cmd=['pip', 'install', '-e', '.'], cwd=os.path.join(DEPS_DIR, 'pygeppetto')) - - # install jupyter geppetto - cprint("Installing org.geppetto.frontend.jupyter") - clone(repository=JUPYTER, - folder=JUPYTER_DIR, - branch_or_tag=jupyter_geppetto_branch - ) - - execute(cmd=['pip', 'install', '-e', '.'], cwd=os.path.join(DEPS_DIR, JUPYTER_DIR)) - execute(cmd=['pip', 'install', '-e', '.'], cwd=ROOT_DIR) - else: - # install requirements - cprint("Installing UI python package...") - execute(cmd=['pip', 'install', '-e', '.', '--no-deps'], cwd=ROOT_DIR) os.chdir(ROOT_DIR) - cprint("Cloning workspace") - clone(repository=WORKSPACE, branch_or_tag=workspace_branch, folder=WORKSPACE_DIR, cwdp=ROOT_DIR) - cprint("Compiling workspace modules") - compile_mod() + if workspace_branch: + cprint("Cloning workspace") + clone(repository=WORKSPACE, branch_or_tag=workspace_branch, folder=WORKSPACE_DIR, cwdp=ROOT_DIR) + cprint("Compiling workspace modules") + #compile_mod() - if not skipNpm and os.path.exists(os.path.join(DEPS_DIR, JUPYTER_DIR)): + if not skipNpm and os.path.exists(os.path.join(DEPS_DIR, META_DIR, JUPYTER_DIR)): cprint("Building Jupyter Geppetto extension...") - execute(cmd=['npm', 'ci'], cwd=os.path.join(DEPS_DIR, JUPYTER_DIR, 'js')) + execute(cmd=['npm', 'ci'], cwd=os.path.join(DEPS_DIR, META_DIR, JUPYTER_DIR, 'js')) execute(cmd=['npm', 'run', 'build-dev' if development else 'build'], - cwd=os.path.join(DEPS_DIR, JUPYTER_DIR, 'js')) + cwd=os.path.join(DEPS_DIR, META_DIR, JUPYTER_DIR, 'js')) + execute(cmd=['jupyter', 'nbextension', 'uninstall', 'jupyter_geppetto']) execute(cmd=['jupyter', 'nbextension', 'install', '--py', '--symlink', '--sys-prefix', 'jupyter_geppetto']) execute(cmd=['jupyter', 'nbextension', 'enable', '--py', '--sys-prefix', 'jupyter_geppetto']) execute(cmd=['jupyter', 'nbextension', 'enable', '--py', '--sys-prefix', 'widgetsnbextension']) @@ -160,6 +171,7 @@ def main(netpyne_branch, workspace_branch, pygeppetto_branch=None, jupyter_geppe _ = config['NotebookApp']['tornado_settings'] except KeyError: config['NotebookApp']['tornado_settings'] = {} + config['NotebookApp']['tornado_settings']['headers'] = { 'Content-Security-Policy': "frame-ancestors 'self' http: https: http://localhost:8081 *" } config['NotebookApp']['tornado_settings']['gzip'] = True f.seek(0) json.dump(config, f, indent=4, sort_keys=True) @@ -173,12 +185,27 @@ def main(netpyne_branch, workspace_branch, pygeppetto_branch=None, jupyter_geppe cprint("Installing test libraries") execute(cmd=['pip', 'install', '-r', 'requirements-test.txt'], cwd=ROOT_DIR) cprint("Testing NetPyNE") - # execute("python -m unittest netpyne_ui.tests.netpyne_model_interpreter_test".split()) + execute("python -m pytest tests".split()) cprint("Installing client packages") if not skipNpm: - execute(cmd=['npm', 'install' if development else 'ci'], cwd=WEBAPP_DIR) - execute(cmd=['npm', 'run', 'build-dev'], cwd=WEBAPP_DIR) + if geppetto_branch: + # install geppetto meta + if os.path.exists(os.path.join(WEBAPP_DIR, '.yalc')): + execute(cmd=['rm', '-rf', '.yalc'], cwd=WEBAPP_DIR) + execute(cmd=['ln', '-s', os.path.expanduser('~') + '/.yalc', '.yalc'], cwd=WEBAPP_DIR) + else: + execute(cmd=['ln', '-s', os.path.expanduser('~') + '/.yalc', '.yalc'], cwd=WEBAPP_DIR) + execute(cmd=['ls'], cwd=WEBAPP_DIR) + execute(cmd=['bash', 'geppetto_ui.sh'], cwd=WEBAPP_DIR) + execute(cmd=['yarn'], cwd=WEBAPP_DIR) + execute(cmd=['yarn', 'run', 'build-dev'], cwd=WEBAPP_DIR) + execute(cmd=['cp', 'package.bak', 'package.json'], cwd=WEBAPP_DIR) + else: + # install jupyter geppetto + cprint("Installing geppetto ui, client and core dependecies") + execute(cmd=['yarn', 'install', '--immutable'], cwd=WEBAPP_DIR) + execute(cmd=['yarn', 'run', 'build'], cwd=WEBAPP_DIR) if __name__ == "__main__": @@ -196,27 +223,22 @@ def main(netpyne_branch, workspace_branch, pygeppetto_branch=None, jupyter_geppe help='Install for development.') parser.add_argument('--netpyne', '-vn', dest='netpyne_version', action="store", - default=os.getenv('NETPYNE_VERSION', 'development'), + default=os.getenv('NETPYNE_VERSION', None), help='Specify NetPyNE library branch or tag.') parser.add_argument('--workspace', '-vw', dest='workspace_version', action="store", default=os.getenv('WORKSPACE_VERSION', 'master'), help='Specify workspace branch or tag.') - parser.add_argument('--pygeppetto', '-vp', dest='pygeppetto_version', action="store", - default=os.getenv('PYGEPPETTO_VERSION', 'development'), + parser.add_argument('--geppetto', '-vp', dest='geppetto_version', action="store", + default=os.getenv('GEPPETTO_VERSION', None), help='Specify Pygeppetto library branch or tag (only for dev build).') - parser.add_argument('--jupyter_geppetto', '-vj', dest='jupyter_geppetto_version', action="store", - default=os.getenv('JUPYTER_GEPPETTO_VERSION', 'development'), - help='Specify Jupyter Geppetto library branch or tag (only for dev build).') - args = parser.parse_args(sys.argv[1:]) print('Install arguments:\n', args) main(skipNpm=args.skipNpm, skipTest=args.skipTest, development=args.development, - netpyne_branch=args.netpyne_version, - workspace_branch=args.workspace_version, - pygeppetto_branch=args.pygeppetto_version, - jupyter_geppetto_branch=args.jupyter_geppetto_version - ) + netpyne_branch=args.netpyne_version, + workspace_branch=args.workspace_version, + geppetto_branch=args.geppetto_version, + ) diff --git a/webapp/.eslintignore b/webapp/.eslintignore index 1d81b61d..f38f43ea 100644 --- a/webapp/.eslintignore +++ b/webapp/.eslintignore @@ -6,4 +6,5 @@ META-INF/* **/tests/jest-puppeteer/**/*.js **/*min.js geppetto-client/** -node_modules/** \ No newline at end of file +node_modules/** +webpack.*.js diff --git a/webapp/.eslintrc.js b/webapp/.eslintrc.js index f95a2637..7add959b 100644 --- a/webapp/.eslintrc.js +++ b/webapp/.eslintrc.js @@ -10,7 +10,52 @@ module.exports = { // Tweak some rules to our preferences 'space-before-function-paren': ['error', 'always'], + 'react/prop-types': 1, 'no-console': 0, + 'import/extensions': 0, + 'max-len': ['warn', { code: 140 }], + 'no-eval': 1, + eqeqeq: 1, + 'no-plusplus': 1, + 'react/destructuring-assignment': 1, + 'no-param-reassign': 1, + 'vars-on-top': 1, + 'no-use-before-define': 1, + 'no-unused-vars': 1, + 'import/no-unresolved': 1, + 'import/named': 1, + 'react/jsx-props-no-spreading': 1, + 'no-nested-ternary': 1, + 'no-return-assign': 1, + 'react/no-array-index-key': 1, + 'react/sort-comp': 1, + 'consistent-return': 1, + 'import/prefer-default-export': 1, + 'react/no-unused-state': 1, + 'jsx-a11y/alt-text': 1, + 'no-restricted-syntax': 1, + 'no-underscore-dangle': 1, + 'no-restricted-globals': 1, + camelcase: 1, + 'max-classes-per-file': 1, + 'jsx-a11y/click-events-have-key-events': 1, + 'jsx-a11y/no-static-element-interactions': 1, + 'prefer-destructuring': 1, + 'no-redeclare': 1, + 'import/no-webpack-loader-syntax': 1, + 'global-require': 1, + 'default-case': 1, + 'react/prefer-stateless-function': 1, + 'block-scoped-var': 1, + 'no-var': 1, + 'no-shadow': 1, + 'react/no-did-update-set-state': 1, + 'react/no-string-refs': 1, + 'no-multi-assign': 1, + 'guard-for-in': 1, + 'no-unused-expressions': 1, + 'no-control-regex': 1, + 'no-loop-func': 1, }, globals: { page: true, @@ -23,6 +68,18 @@ module.exports = { CanvasContainer: true, patchRequire: true, window: true, + document: true, + $: true, + IPython: true, + fetch: true, + Blob: true, + FormData: true, + Event: true, + jQuery: true, + define: true, + // geppetto + Instances: true, GEPPETTO: true, + IPython: true, }, }; diff --git a/webapp/GeppettoConfiguration.json b/webapp/GeppettoConfiguration.json index 54e3cc20..f5b97848 100644 --- a/webapp/GeppettoConfiguration.json +++ b/webapp/GeppettoConfiguration.json @@ -1,11 +1,12 @@ { "_README" : "http://docs.geppetto.org/en/latest/build.html", "contextPath": "org.geppetto.frontend", - "useSsl": false, - "embedded": false, + "useSsl": true, + "embedded": true, "embedderURL": ["/"], "rootRedirect":"", "noTest": false, + "customSplash": "geppetto/build/static/splash.gif", "extensions": { "geppetto-default/ComponentsInitialization": false, "geppetto-netpyne/ComponentsInitialization": true diff --git a/webapp/Main.js b/webapp/Main.js index c48f0ca9..e1663bf1 100644 --- a/webapp/Main.js +++ b/webapp/Main.js @@ -1,39 +1,48 @@ -global.jQuery = require('jquery'); -global.GEPPETTO_CONFIGURATION = require('./GeppettoConfiguration.json'); - -jQuery(() => { - require('geppetto-client-initialization'); - const ReactDOM = require('react-dom'); - const React = require('react'); - const { MuiThemeProvider } = require('@material-ui/core/styles'); - const { NetPyNE } = require('./components'); - - const theme = require('./theme').default; - - const { Provider } = require('react-redux'); - const configureStore = require('./redux/store').default; - - require('./css/netpyne.less'); - require('./css/material.less'); - require('./css/traceback.less'); - require('./css/flexlayout.less'); - require('./css/tree.less'); +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Provider } from 'react-redux'; +import { MuiThemeProvider } from '@material-ui/core/styles'; +import * as Sentry from '@sentry/react'; +import { CaptureConsole } from '@sentry/integrations'; +import { LoadingSpinner } from '@metacell/geppetto-meta-client/components'; +import { NetPyNE } from './components'; +import theme from './theme'; +import store from './redux/store'; +import '@metacell/geppetto-meta-ui/flex-layout/style/dark.css'; - const store = configureStore(); - - ReactDOM.render( -

- - - - - - -
, - document.querySelector('#mainContainer'), - ); - - GEPPETTO.G.setIdleTimeOut(-1); - GEPPETTO.Resources.COLORS.DEFAULT = '#6f54aa'; - GEPPETTO.trigger(GEPPETTO.Events.Show_spinner, 'Initialising NetPyNE'); -}); +global.GEPPETTO_CONFIGURATION = require('./GeppettoConfiguration.json'); +const { initGeppetto } = require('@metacell/geppetto-meta-client/GEPPETTO'); + +if (process.env.NODE_ENV === 'production') { + Sentry.init({ + dsn: 'https://d8bf7e40eec34cb9891f6dd8207b5e83@sentry.metacell.us/6', + integrations: [ + new CaptureConsole({ + levels: ['error'], + }), + ], + tracesSampleRate: 1.0, + }); +} + +window.$ = Array; // TODO Temporary fix -- remove upon https://github.com/MetaCell/geppetto-meta/issues/380 +initGeppetto(); +require('./css/netpyne.less'); +require('./css/material.less'); +require('./css/traceback.less'); +require('./css/flexlayout.less'); +require('./css/tree.less'); + +ReactDOM.render( +
+ + + + + + +
, + document.querySelector('#mainContainer'), +); + +GEPPETTO.Resources.COLORS.DEFAULT = '#6f54aa'; diff --git a/webapp/Utils.js b/webapp/Utils.js index 33d82062..da39c01c 100644 --- a/webapp/Utils.js +++ b/webapp/Utils.js @@ -1,13 +1,14 @@ +import * as Sentry from '@sentry/react'; + import { execPythonMessage, evalPythonMessage, -} from '@geppettoengine/geppetto-client/js/communication/geppettoJupyter/GeppettoJupyterUtils'; -import React from 'react'; +} from './components/general/GeppettoJupyterUtils'; const Utils = { getAvailableKey (model, prefix) { - if (model == undefined) { + if (model === undefined) { return prefix; } // Get New Available ID @@ -23,24 +24,65 @@ const Utils = { return id; }, - getMetadataField (key, field) { - if (key == undefined) { - return; + captureSentryException (e) { + if (process.env.NODE_ENV == 'production') + Sentry.captureException(e); + console.error(e); + }, + + /** + * Retrieves the metadata object for the passed `key`. + * + * A specific attributes can be selected by passing `field`. + * + * The algorithm will iteratively test the key for each nesting in metadata. + * + * Example key: `netParams.popParams.E.numCells`. + * Since 'E' is not explicitly modeled in `netpyne.metadata` + * this algorithm implements additional logic to skip certain levels. + * + * @param {*} key key of metadata path. + * @param {*} field specific object attribute. + * @returns metadata object or specific attribute. + */ + getMetadataField (key, field = null) { + if (key === undefined) { + return null; } + let currentObject; let nextObject = window.metadata; - key.split('.') - .forEach((item) => { + let skipped = false; + + // eslint-disable-next-line no-restricted-syntax + for (const item of key.split('.')) { + if (currentObject != null && currentObject?.container === true && !(item in nextObject)) { + if (skipped) { + return null; + } + + // skip the list element, e.g. "E"! + // console.debug(`Skip ${item} at ${nextObject.label}`); + skipped = true; + } else { + skipped = false; + if (item in nextObject) { currentObject = nextObject[item]; if ('children' in currentObject) { nextObject = currentObject.children; } } else { - currentObject = undefined; + currentObject = null; } - }); - return (currentObject == undefined) ? currentObject : currentObject[field]; + } + } + + if (currentObject) { + return field ? currentObject[field] : currentObject; + } + + return null; }, getHTMLType (key) { @@ -113,7 +155,13 @@ const Utils = { return modelFields; }, + asEscapedString (value) { + return value.replace(/\\/g, '\\\\').replace(/"/g, '\\"') + }, + renameKey (path, oldValue, newValue, callback) { + oldValue = oldValue.replace(/\\/g, '\\\\').replace(/"/g, '\\"'); + newValue = newValue.replace(/\\/g, '\\\\').replace(/"/g, '\\"'); this.execPythonMessage(`netpyne_geppetto.rename("${path}","${oldValue}","${newValue}")`) .then((response) => { callback(response, newValue); @@ -132,7 +180,7 @@ const Utils = { return name; }, - // FIXME: Hack to remove scaped chars (\\ -> \ and \' -> ') manually + // FIXME: Hack to remove escaped chars (\\ -> \ and \' -> ') manually convertToJSON (data) { if (typeof data === 'string' || data instanceof String) { return JSON.parse(data.replace(/\\\\/g, '\\') @@ -147,20 +195,23 @@ const Utils = { getErrorResponse (data) { const parsedData = this.convertToJSON(data); - if (parsedData.type && parsedData.type == 'ERROR') { + if (parsedData && parsedData.type && parsedData.type === 'ERROR') { const error = { details: parsedData.details }; if (Object.prototype.hasOwnProperty.call(parsedData, 'message')) { error.message = parsedData.message; } else if (Object.prototype.hasOwnProperty.call(parsedData, 'websocket')) { error.message = parsedData.websocket; } + if (Object.prototype.hasOwnProperty.call(parsedData, 'additional_info')) { + error.additionalInfo = parsedData.additional_info ; + } return error; } return null; }, handleUpdate (updateCondition, newValue, originalValue, context, componentName) { - if ((updateCondition) && (newValue != originalValue)) { + if ((updateCondition) && (newValue !== originalValue)) { /* * if the new value has been changed by the function Utils.nameValidation means that the name convention * has not been respected, so we need to open the dialog and inform the user. @@ -171,10 +222,10 @@ const Utils = { errorDetails: `Leading digits or whitespaces are not allowed in ${componentName} names.`, }); return true; - } if ((updateCondition) && (newValue == originalValue)) { + } if ((updateCondition) && (newValue === originalValue)) { context.setState({ currentName: newValue }); return true; - } if (!(updateCondition) && (newValue == originalValue)) { + } if (!(updateCondition) && (newValue === originalValue)) { context.setState({ currentName: newValue, errorMessage: 'Error', @@ -182,7 +233,7 @@ const Utils = { } is already used in this model, please pick another name.`, }); return false; - } if (!(updateCondition) && (newValue != originalValue)) { + } if (!(updateCondition) && (newValue !== originalValue)) { context.setState({ currentName: newValue, errorMessage: 'Error', @@ -192,8 +243,22 @@ const Utils = { } }, + formatDate (timestamp) { + const date = new Date(timestamp); + return date?.toLocaleString(); + }, + execPythonMessage, evalPythonMessage, + + flatten (obj, path = '') { + if (!(obj instanceof Object)) return { [path.replace(/\.$/g, '')]: obj }; + + return Object.keys(obj) + .reduce((output, key) => (obj instanceof Array + ? { ...output, ...Utils.flatten(obj[key], `${path.slice(0, -1)}[${key}].`) } + : { ...output, ...Utils.flatten(obj[key], `${path + key}.`) }), {}); + }, }; export default Utils; diff --git a/webapp/api/experiments.js b/webapp/api/experiments.js new file mode 100644 index 00000000..568df62e --- /dev/null +++ b/webapp/api/experiments.js @@ -0,0 +1,17 @@ +import Utils from 'root/Utils'; + +export const getExperiments = () => Utils.evalPythonMessage('netpyne_geppetto.experiments.get_experiments', []); + +export const getExperiment = (name) => Utils.evalPythonMessage('netpyne_geppetto.experiments.get_experiment', [name]); +export const removeExperiment = (name) => Utils.evalPythonMessage('netpyne_geppetto.experiments.remove_experiment', [name]); +export const addExperiment = (experiment) => Utils.evalPythonMessage('netpyne_geppetto.experiments.add_experiment', [experiment]); +export const editExperiment = (name, experiment) => Utils.evalPythonMessage('netpyne_geppetto.experiments.edit_experiment', + [name, experiment]); + +export const getParameters = () => Utils.evalPythonMessage('netpyne_geppetto.getModelAsJson', []); +export const getModelSpecification = (name, trial) => Utils.evalPythonMessage('netpyne_geppetto.experiments.get_model_specification', + [name, trial]); + +export const getRunConfiguration = () => Utils.evalPythonMessage('netpyne_geppetto.get_run_configuration', []); +export const editRunConfiguration = (runConfig) => Utils.evalPythonMessage('netpyne_geppetto.edit_run_configuration', + [runConfig]); diff --git a/webapp/api/hooks.js b/webapp/api/hooks.js new file mode 100644 index 00000000..365d9684 --- /dev/null +++ b/webapp/api/hooks.js @@ -0,0 +1,30 @@ +import { useEffect, useRef } from 'react'; + +/** + * Interval hook taken from: https://overreacted.io/making-setinterval-declarative-with-react-hooks/ + * + * @param callback + * @param delay + */ +const useInterval = (callback, delay) => { + const savedCallback = useRef(); + + // Remember the latest callback. + useEffect(() => { + savedCallback.current = callback; + }, [callback]); + + // Set up the interval. + useEffect(() => { + function tick () { + savedCallback.current(); + } + + if (delay !== null) { + const id = setInterval(tick, delay); + return () => clearInterval(id); + } + }, [delay]); +}; + +export default useInterval; diff --git a/webapp/babel.config.js b/webapp/babel.config.js index e7772fc3..0ba8b437 100644 --- a/webapp/babel.config.js +++ b/webapp/babel.config.js @@ -4,6 +4,8 @@ module.exports = { '@babel/preset-env', { targets: { node: 'current' } }, ], + '@babel/preset-typescript', + '@babel/preset-react', ], plugins: [ '@babel/plugin-proposal-class-properties', diff --git a/webapp/components/NetPyNE.js b/webapp/components/NetPyNE.js index 932dbbc7..e61b6b1b 100644 --- a/webapp/components/NetPyNE.js +++ b/webapp/components/NetPyNE.js @@ -8,11 +8,13 @@ import { LayoutManager, Drawer, Dialog, + ConfirmationDialog, + LaunchDialog, + TutorialObserver, } from 'netpyne/components'; - -import Utils from '../Utils'; - -import { EDIT_WIDGETS } from '../constants'; +import { openDialog } from '../redux/actions/general'; +// import { execPythonMessage } from './general/GeppettoJupyterUtils'; +import { replayAll } from './general/CommandRecorder'; const styles = ({ zIndex }) => ({ root: { @@ -29,7 +31,7 @@ const styles = ({ zIndex }) => ({ }, topbar: { position: 'relative', - zIndex: zIndex.drawer + 1, + zIndex: zIndex.drawer, }, content: { flexGrow: 1, @@ -40,97 +42,177 @@ const styles = ({ zIndex }) => ({ noGrow: { flexGrow: 0 }, }); -const TIMEOUT = 10000; class NetPyNE extends React.Component { - openPythonCallDialog (event) { - const payload = { - errorMessage: event.evalue, - errorDetails: event.traceback.join('\n'), - }; - this.props.pythonCallErrorDialogBox(payload); - } - - addMetadataToWindow (data) { - console.log('Initialising NetPyNE Tabs'); - window.metadata = data.metadata; - window.currentFolder = data.currentFolder; - window.isDocker = data.isDocker; - window.pythonConsoleLoaded = true; - window.tuts = data.tuts; + constructor (props) { + super(props); + this.openPythonCallDialog = this.openPythonCallDialog.bind(this); + this.kernelRestartState = { + state: "idle", + kernelID: undefined, + crashLoop: false + } } componentDidMount () { GEPPETTO.on(GEPPETTO.Events.Error_while_exec_python_command, this.openPythonCallDialog, this); - this.props.setDefaultWidgets(); - - GEPPETTO.on('jupyter_geppetto_extension_ready', (data) => { - const project = { - id: 1, - name: 'Project', - experiments: [{ - id: 1, - name: 'Experiment', - status: 'DESIGN', - }], - }; - GEPPETTO.Manager.loadProject(project, false); - GEPPETTO.Manager.loadExperiment(1, [], []); - - let responded = false; - Utils.execPythonMessage('from netpyne_ui.netpyne_geppetto import netpyne_geppetto'); - Utils.evalPythonMessage('netpyne_geppetto.getData', []) - .then((response) => { - responded = true; - - GEPPETTO.trigger(GEPPETTO.Events.Show_spinner, 'Loading NetPyNE-UI'); - const metadata = Utils.convertToJSON(response); - this.addMetadataToWindow(metadata); - this.props.setWidgets(EDIT_WIDGETS); - this.props.modelLoaded(); - GEPPETTO.trigger(GEPPETTO.Events.Hide_spinner); - }); - - setTimeout(() => { - if (!responded) { - GEPPETTO.trigger(GEPPETTO.Events.Show_spinner, 'Reloading Python Kernel'); - IPython.notebook.restart_kernel({ confirm: false }) - .then(() => window.location.reload()); + + const { + setDefaultWidgets, + } = this.props; + + setDefaultWidgets(); + + + + // Logic for kernel reinit + const handleKernelRestart = ({ detail: { kernel, type } }) => { + switch (this.kernelRestartState.state) { + case "restarting": + if (type === "kernel_ready" || type === "kernel_autorestarting") { + console.log("Replaying all commands since the beginning of the session") + replayAll(this.kernelRestartState.kernelID) + this.kernelRestartState = { + ...this.kernelRestartState, + state: "idle", + kernelID: undefined, + } + } + case "idle": + if (type === "kernel_connected") { + console.log("Kernel is connecting/starting, being init") + this.kernelRestartState = { + ...this.kernelRestartState, + state: "init", + kernelID: kernel.id + } + } + else if (type === "kernel_autorestarting") { + console.log("Kernel restart event caught, trying to re-init the current model") + this.kernelRestartState = { + ...this.kernelRestartState, + state: "restarting", + kernelID: kernel.id + } + if (!this.kernelRestartState.crashLoop) { + this.props.dispatchAction(openDialog({ + title: "Kernel restart", + message: "An action occured that made the kernel restart. We are reloading your model and all the actions you applied on it." + })) + } + } + else if (type === "kernel_restarting") { + console.log("Kernel restart, perhaps it's a special restart?") + this.kernelRestartState = { + ...this.kernelRestartState, + state: "special_restart", + kernelID: kernel.id + } + } + case "init": + if (type === "kernel_ready") { + console.log("Kernel properly initialized") + this.kernelRestartState = { + ...this.kernelRestartState, + state: "idle", + kernelID: undefined, + } + } + case "special_restart": + if (type == "kernel_autorestarting") { + console.log("Kernel autorestart after a start, we might not have the ready event, we force it then") + replayAll(this.kernelRestartState.kernelID) + this.kernelRestartState = { + ...this.kernelRestartState, + state: 'restarting', + kernelID: kernel.id, + } + } else { + console.log("Regular restart detected") + this.kernelRestartState = { + ...this.kernelRestartState, + state: 'idle', + kernelID: undefined, + } + } + } + } + window.addEventListener('kernelstatus', handleKernelRestart) + + // Dedicated code to handle crash loops + const kernelRestartLoopHandler = ( ) => { + if (!this.kernelRestartState.crashLoop) { + this.props.dispatchAction(openDialog({ + title: "Kernel restart loop stabilization", + message: "One of your actions triggered a kernel restart loop. We are trying to identify the faulty command and to restore your model until this point. Close this window and wait for the kernel stabilization notification." + })) + } else { + clearTimeout(this.kernelRestartState.crashLoop) + } + const taskID = setTimeout((_this) => { + this.props.dispatchAction(openDialog({ + title: "Kernel restart loop stabilized", + message: "The kernel is now stabilized." + })); + this.kernelRestartState = { + ...this.kernelRestartState, + crashLoop: false } - }, TIMEOUT); - }); + }, 8000, this) + this.kernelRestartState = { + ...this.kernelRestartState, + crashLoop: taskID + } + } + window.addEventListener('kernelRestartLoop', kernelRestartLoopHandler) } componentWillUnmount () { GEPPETTO.off(GEPPETTO.Events.Error_while_exec_python_command, this.openPythonCallDialog, this); } + openPythonCallDialog (event) { + if (event?.evalue && event?.traceback) { + this.props.pythonCallErrorDialogBox({ + errorMessage: event.evalue, + errorDetails: event.traceback.join('\n'), + }); + } else { + this.props.pythonCallErrorDialogBox({ + errorMessage: event.data.response.evalue, + errorDetails: event.data.response.traceback.join('\n'), + }); + } + } + render () { const { classes } = this.props; - if (!this.props.modelLoaded) { - return ''; - } + const Layout = LayoutManager(); return ( -
-
-
- -
- - - - + +
+
+
+ +
+ + + + + + + + - - - - - + +
+ + + +
- - -
+ ); } } diff --git a/webapp/components/definition/cellRules/NetPyNECellRules.js b/webapp/components/definition/cellRules/NetPyNECellRules.js index adc161a4..cfcb944b 100644 --- a/webapp/components/definition/cellRules/NetPyNECellRules.js +++ b/webapp/components/definition/cellRules/NetPyNECellRules.js @@ -86,6 +86,7 @@ export default class NetPyNECellRules extends React.Component { handleNewCellRule (defaultCellRules) { const key = Object.keys(defaultCellRules)[0]; const value = defaultCellRules[key]; + // eslint-disable-next-line react/no-access-state-in-setstate const model = { ...this.state.value }; // Get New Available ID @@ -337,6 +338,8 @@ export default class NetPyNECellRules extends React.Component { } componentDidUpdate (prevProps, prevState) { + if (this.props.commands !== prevProps.commands) + this.forceUpdate(); // we need to check if any of the three entities have been renamed and if that's the case change the state for the selection variable const newCellRuleName = this.hasSelectedCellRuleBeenRenamed( prevState, @@ -483,7 +486,7 @@ export default class NetPyNECellRules extends React.Component { if (page === 'main') { event.preventDefault(); this.setState({ anchorEl: event.currentTarget }); - // this.handleNewCellRule({ 'CellType': { 'conds':{}, 'secs':{} } }); + // this.handleNewCellRule({ CellType: { conds: {}, secs: {} } }); } else if (page === 'sections') { this.handleNewSection({ Section: { @@ -608,6 +611,7 @@ export default class NetPyNECellRules extends React.Component { name, ]) .then((response) => { + // eslint-disable-next-line react/no-access-state-in-setstate const model = this.state.value; delete model[this.state.selectedCellRule].secs[ this.state.selectedSection @@ -627,6 +631,7 @@ export default class NetPyNECellRules extends React.Component { name, ]) .then((response) => { + // eslint-disable-next-line react/no-access-state-in-setstate const model = this.state.value; delete model[this.state.selectedCellRule].secs[name]; this.setState({ @@ -804,6 +809,7 @@ export default class NetPyNECellRules extends React.Component { break; } default: { + break; } } return 'undefined'; diff --git a/webapp/components/definition/cellRules/SelectCellTemplate.js b/webapp/components/definition/cellRules/SelectCellTemplate.js index ff38d6cd..628b4ebe 100644 --- a/webapp/components/definition/cellRules/SelectCellTemplate.js +++ b/webapp/components/definition/cellRules/SelectCellTemplate.js @@ -1,12 +1,14 @@ import React, { Component } from 'react'; import Menu from '@material-ui/core/Menu'; import MenuItem from '@material-ui/core/MenuItem'; +import { connect } from 'react-redux'; +import { runControlledStep } from '../../../redux/actions/tutorials'; import Fab from '@material-ui/core/Fab'; import Tooltip from '../../general/Tooltip'; import Utils from '../../../Utils'; -export default class NetPyNENewPlot extends React.Component { +class NetPyNENewPlot extends React.Component { constructor (props) { super(props); this.handleClick = this.handleSelection.bind(this); @@ -14,6 +16,10 @@ export default class NetPyNENewPlot extends React.Component { this.state = { anchorEl: null }; } + componentDidMount() { + //this.props.dispatch(runControlledStep({ tourStep: 1 })); + } + handleButtonClick = (event) => { // This prevents ghost click. event.preventDefault(); @@ -42,8 +48,11 @@ export default class NetPyNENewPlot extends React.Component { handleButtonClick, anchorEl, clearAnchorEl, + tourRunning } = this.props; + const displayMenu = Boolean(anchorEl); + return (
@@ -52,6 +61,7 @@ export default class NetPyNENewPlot extends React.Component { style={{ width: 40, height: 40, + borderRadius: '50%', }} color={page == 'main' ? 'primary' : 'secondary'} onClick={(event) => handleButtonClick(event)} @@ -70,7 +80,7 @@ export default class NetPyNENewPlot extends React.Component { clearAnchorEl()} @@ -79,7 +89,6 @@ export default class NetPyNENewPlot extends React.Component { id="emptyCellTemplate" key="Empty" value="Empty" - onClick={() => this.handleSelection('Empty')} > Empty cell @@ -117,3 +126,11 @@ export default class NetPyNENewPlot extends React.Component { ); } } + +const mapStateToProps = (state) => { + return { + tourRunning: state.tutorial.tourRunning + }; +}; + +export default connect(mapStateToProps)(NetPyNENewPlot); diff --git a/webapp/components/definition/cellRules/sections/NetPyNESection.js b/webapp/components/definition/cellRules/sections/NetPyNESection.js index 67f7dc2c..ce33e805 100644 --- a/webapp/components/definition/cellRules/sections/NetPyNESection.js +++ b/webapp/components/definition/cellRules/sections/NetPyNESection.js @@ -276,7 +276,6 @@ export default class NetPyNESection extends React.Component { showLabels style={{ borderRadius: '4px' }} value={this.state.selectedIndex} - showLabels > {bottomNavigationItems} diff --git a/webapp/components/definition/cellRules/sections/mechanisms/NetPyNEMechanism.js b/webapp/components/definition/cellRules/sections/mechanisms/NetPyNEMechanism.js index e2691c70..20195872 100644 --- a/webapp/components/definition/cellRules/sections/mechanisms/NetPyNEMechanism.js +++ b/webapp/components/definition/cellRules/sections/mechanisms/NetPyNEMechanism.js @@ -37,7 +37,7 @@ export default class NetPyNEMechanism extends React.Component { name={name} model={`${tag}['${name}']`} label={name} - realType="float" + realType="func" /> )); diff --git a/webapp/components/definition/configuration/NetPyNESimConfig.js b/webapp/components/definition/configuration/NetPyNESimConfig.js index f71a26fb..919fae00 100644 --- a/webapp/components/definition/configuration/NetPyNESimConfig.js +++ b/webapp/components/definition/configuration/NetPyNESimConfig.js @@ -11,20 +11,22 @@ import { GridLayout, } from 'netpyne/components'; +const CONFIG_SECTIONS = { + GENERAL: 'General', + SAVE_CONFIGURATION: 'SaveConfiguration', + RECORD: 'Record', + NET_PARAMS: 'netParams', +}; + class NetPyNESimConfig extends React.Component { constructor (props) { super(props); this.state = { - model: props.model, selectedIndex: 0, - sectionId: 'General', + sectionId: CONFIG_SECTIONS.GENERAL, }; } - UNSAFE_componentWillReceiveProps (nextProps) { - this.setState({ model: nextProps.model }); - } - select = (index, sectionId) => this.setState({ selectedIndex: index, sectionId, @@ -34,7 +36,7 @@ class NetPyNESimConfig extends React.Component { let contentLeft =
; let contentRight =
; const { classes } = this.props; - if (this.state.sectionId == 'General') { + if (this.state.sectionId === CONFIG_SECTIONS.GENERAL) { contentLeft = (
@@ -69,19 +71,6 @@ class NetPyNESimConfig extends React.Component { - - - - - - -
); contentRight = ( @@ -172,7 +161,7 @@ class NetPyNESimConfig extends React.Component {
); - } else if (this.state.sectionId == 'SaveConfiguration') { + } else if (this.state.sectionId === CONFIG_SECTIONS.SAVE_CONFIGURATION) { contentLeft = (
@@ -254,7 +243,7 @@ class NetPyNESimConfig extends React.Component {
); - } else if (this.state.sectionId == 'Record') { + } else if (this.state.sectionId === CONFIG_SECTIONS.RECORD) { contentLeft = (
@@ -288,6 +277,14 @@ class NetPyNESimConfig extends React.Component { + + + + + + + + + + + + + + + + + + + + +
); - } else if (this.state.sectionId == 'netParams') { + } else if (this.state.sectionId === CONFIG_SECTIONS.NET_PARAMS) { contentLeft = (
@@ -405,28 +435,28 @@ class NetPyNESimConfig extends React.Component { > } onClick={() => this.select(0, 'General')} /> } onClick={() => this.select(1, 'Record')} /> } onClick={() => this.select(2, 'SaveConfiguration')} /> } onClick={() => this.select(3, 'netParams')} @@ -443,7 +473,6 @@ class NetPyNESimConfig extends React.Component { } const styles = ({ - shape, spacing, }) => ({ root: { @@ -462,6 +491,7 @@ const styles = ({ maxHeight: `calc(100vh - ${spacing(27)}px)`, overflowY: 'auto', }, + option: { color: 'white' }, }); export default withStyles(styles)(NetPyNESimConfig); diff --git a/webapp/components/definition/connectivity/NetPyNEConnectivityRule.js b/webapp/components/definition/connectivity/NetPyNEConnectivityRule.js index 7dd3c1d5..587f3b00 100644 --- a/webapp/components/definition/connectivity/NetPyNEConnectivityRule.js +++ b/webapp/components/definition/connectivity/NetPyNEConnectivityRule.js @@ -198,12 +198,9 @@ export default class NetPyNEConnectivityRule extends React.Component { `netParams.connParams['${this.props.name}']['synMech']` } fullWidth + multiple method="netpyne_geppetto.getAvailableSynMech" - postProcessItems={(pythonData, selected) => pythonData.map((name) => ( - - {name} - - ))} + postProcessItems={this.postProcessMenuItems} /> diff --git a/webapp/components/definition/connectivity/NetPyNEConnectivityRules.js b/webapp/components/definition/connectivity/NetPyNEConnectivityRules.js index b1992425..d1b3b5ca 100644 --- a/webapp/components/definition/connectivity/NetPyNEConnectivityRules.js +++ b/webapp/components/definition/connectivity/NetPyNEConnectivityRules.js @@ -34,7 +34,7 @@ export default class NetPyNEConnectivityRules extends Component { this.handleRenameChildren = this.handleRenameChildren.bind(this); } - handleToggle = () => this.setState({ drawerOpen: !this.state.drawerOpen }); + handleToggle = () => this.setState((prevState) => ({ drawerOpen: !prevState.drawerOpen })); selectPage (page) { this.setState({ page }); @@ -55,6 +55,7 @@ export default class NetPyNEConnectivityRules extends Component { // Get Key and Value const key = Object.keys(defaultConnectivityRules)[0]; const value = defaultConnectivityRules[key]; + // eslint-disable-next-line react/no-access-state-in-setstate const model = { ...this.state.value }; // Get New Available ID @@ -102,6 +103,8 @@ export default class NetPyNEConnectivityRules extends Component { } componentDidUpdate (prevProps, prevState) { + if (this.props.commands !== prevProps.commands) + this.forceUpdate(); // we need to check if any of the three entities have been renamed and if that's the case change the state for the selection variable const newConnectivityRuleName = this.hasSelectedConnectivityRuleBeenRenamed( prevState, @@ -246,7 +249,7 @@ export default class NetPyNEConnectivityRules extends Component { /> )); - var selectedConnectivityRule = undefined; + var selectedConnectivityRule; if ( this.state.selectedConnectivityRule !== undefined && Object.keys(model) diff --git a/webapp/components/definition/plots/NetPyNEInclude.js b/webapp/components/definition/plots/NetPyNEInclude.js index 07d36fcf..fbf7b8c6 100644 --- a/webapp/components/definition/plots/NetPyNEInclude.js +++ b/webapp/components/definition/plots/NetPyNEInclude.js @@ -67,11 +67,12 @@ export default class NetPyNEInclude extends Component { let answer = ''; if (include.exclusive) { return `${include.exclusive} -- ${data.gids} cells -- all NetStims`; - } if (include.groups.indexOf('allCells') > -1) { + } + if (include.groups.indexOf('allCells') > -1) { if (include.groups.indexOf('allNetStims') == -1) { return `allCells -- ${data.gids} cells`; } - return `${'all' + ' -- '}${data.gids} cells -- all NetStims`; + return `all -- ${data.gids} cells -- all NetStims`; } include.groups.forEach((group) => { if (group != 'allNetStims') { @@ -171,15 +172,15 @@ export default class NetPyNEInclude extends Component { }); if ((open || this.state.mainPopoverOpen) && !(open && this.state.mainPopoverOpen)) { - this.setState({ + this.setState((prevState) => ({ mainPopoverOpen: open, secondPopoverOpen: clone, - anchorEl: target || this.state.anchorEl, - }); + anchorEl: target || prevState.anchorEl, + })); } if (!open) { this.sendToPython(); - this.setState({ label: this.whoIsIncluded(this.state.include, this.state.data) }); + this.setState((prevState) => ({ label: this.whoIsIncluded(prevState.include, prevState.data) })); } }; @@ -195,11 +196,10 @@ export default class NetPyNEInclude extends Component { }); if (!this.checkEqual(clone, this.state.secondPopoverOpen)) { - this.setState({ + this.setState((prevState) => ({ secondPopoverOpen: clone, - anchorEl2: target || this.state.anchorEl, - }); - } else { + anchorEl2: target || prevState.anchorEl, + })); } }; @@ -318,6 +318,7 @@ export default class NetPyNEInclude extends Component { }; handleSecondaryMenusClick = (group, name, item) => { + // eslint-disable-next-line react/no-access-state-in-setstate const clone = { ...this.state.include }; if (group == 'gids') { clone[group].indexOf(item) == -1 ? clone[group].push(item) : clone[group].splice(clone[group].indexOf(item), 1); @@ -330,7 +331,6 @@ export default class NetPyNEInclude extends Component { if (clone.groups.indexOf(name) > -1) { // when selecting individuals, remove population selection clone.groups.splice(clone.groups.indexOf(name), 1); } - } else { } clone.exclusive = false; if (clone.groups.indexOf('allCells') > -1 && name != 'allNetStims') { @@ -342,7 +342,8 @@ export default class NetPyNEInclude extends Component { IsSecondaryMenuChecked = (group, name, index) => { if (group == 'gids') { return this.state.include[group].indexOf(index) > -1; - } if (group == 'popids') { + } + if (group == 'popids') { if (name in this.state.include[group]) { return this.state.include[group][name].indexOf(index) > -1; } diff --git a/webapp/components/definition/plots/NetPyNENewPlot.js b/webapp/components/definition/plots/NetPyNENewPlot.js index f6df1ee7..648cf1d2 100644 --- a/webapp/components/definition/plots/NetPyNENewPlot.js +++ b/webapp/components/definition/plots/NetPyNENewPlot.js @@ -28,7 +28,7 @@ export default class NetPyNENewPlot extends React.Component { return (
- + @@ -101,6 +101,13 @@ export default class NetPyNENewPlot extends React.Component { > Granger Causality Plot + this.handleClick('plotRateSpectrogram')} + > + Rate Spectrogram Plot +
); diff --git a/webapp/components/definition/plots/NetPyNEPlots.js b/webapp/components/definition/plots/NetPyNEPlots.js index cf9ecb02..0ffeb385 100644 --- a/webapp/components/definition/plots/NetPyNEPlots.js +++ b/webapp/components/definition/plots/NetPyNEPlots.js @@ -10,6 +10,7 @@ import PlotRaster from './plotTypes/PlotRaster'; import PlotTraces from './plotTypes/PlotTraces'; import PlotGranger from './plotTypes/PlotGranger'; import PlotRatePSD from './plotTypes/PlotRatePSD'; +import PlotRateSpectrogram from './plotTypes/PlotRateSpectrogram' import PlotSpikeHist from './plotTypes/PlotSpikeHist'; import PlotSpikeStats from './plotTypes/PlotSpikeStats'; import NetPyNENewPlot from './NetPyNENewPlot'; @@ -29,6 +30,11 @@ export default class NetPyNEPlots extends React.Component { this.handleNewPlot = this.handleNewPlot.bind(this); } + componentDidUpdate (prevProps, prevState) { + if (this.props.commands !== prevProps.commands) + this.forceUpdate(); + } + selectPlot (plot) { this.setState({ selectedPlot: plot }); } @@ -123,6 +129,9 @@ export default class NetPyNEPlots extends React.Component { case 'granger': selectedPlot = ; break; + case 'plotRateSpectrogram': + selectedPlot = ; + break; } return ( diff --git a/webapp/components/definition/plots/plotTypes/PlotRateSpectrogram.js b/webapp/components/definition/plots/plotTypes/PlotRateSpectrogram.js new file mode 100644 index 00000000..2c78b0e0 --- /dev/null +++ b/webapp/components/definition/plots/plotTypes/PlotRateSpectrogram.js @@ -0,0 +1,116 @@ +import React, { Component } from 'react'; +import Box from '@material-ui/core/Box'; +import { + NetPyNEInclude, + NetPyNEField, + SelectField, + NetPyNECheckbox, + NetPyNETextField, +} from 'netpyne/components'; +import TimeRange from '../TimeRange'; + +export default class PlotRateSpectrogram extends React.Component { + constructor (props) { + super(props); + this.state = { checked: false }; + this.handleCheckChange = this.handleCheckChange.bind(this); + } + + handleCheckChange = (event, isCheck) => { + this.setState({ Checked: isCheck }); + }; + + render () { + const tag = 'simConfig.analysis[\'plotRateSpectrogram\']'; + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + {/* + + + + + + + + + + + + + + + + + + */} + + ); + } +} diff --git a/webapp/components/definition/populations/Dimensions.js b/webapp/components/definition/populations/Dimensions.js index 798f42ab..2bb72455 100644 --- a/webapp/components/definition/populations/Dimensions.js +++ b/webapp/components/definition/populations/Dimensions.js @@ -6,9 +6,9 @@ import Box from '@material-ui/core/Box'; import InputLabel from '@material-ui/core/InputLabel'; import FormControl from '@material-ui/core/FormControl'; - import { NetPyNEField, + ListComponent, NetPyNETextField, } from 'netpyne/components'; import Utils from '../../../Utils'; @@ -44,6 +44,10 @@ class DimensionsComponent extends Component { label: 'Grid spacing', value: 'gridSpacing', }, + { + label: 'Cell List', + value: 'cellsList', + }, ]; } @@ -52,7 +56,6 @@ class DimensionsComponent extends Component { this.updateLayout(); } } - componentWillUnmount () { this.mounted = false; } @@ -74,8 +77,8 @@ class DimensionsComponent extends Component { updateLayout () { const requests = this.popDimensionsOptions.map((popDimensionsOption) => // FIXME Better to wrap calls rather than directly accessing objects - Utils - .evalPythonMessage(`'${popDimensionsOption.value}' in netpyne_geppetto.netParams.popParams['${this.state.modelName}']`)); + // eslint-disable-next-line implicit-arrow-linebreak + Utils.evalPythonMessage(`'${popDimensionsOption.value}' in netpyne_geppetto.netParams.popParams['${this.state.modelName}']`)); // Get population dimension by asking each for each key Promise.all(requests) @@ -108,6 +111,7 @@ class DimensionsComponent extends Component { render () { const { classes } = this.props; + return (
@@ -139,22 +143,29 @@ class DimensionsComponent extends Component { this.state.dimension != undefined && this.state.dimension != '' && ( - - { - this.props.updateCards(); - }} + realType="list(dict)" /> - + ) : ( + + { + this.props.updateCards(); + }} + /> + + )} ) } diff --git a/webapp/components/definition/populations/NetPyNEPopulation.js b/webapp/components/definition/populations/NetPyNEPopulation.js index fa6061dd..a163db61 100644 --- a/webapp/components/definition/populations/NetPyNEPopulation.js +++ b/webapp/components/definition/populations/NetPyNEPopulation.js @@ -1,25 +1,35 @@ -import React from 'react'; +import React, { useState } from 'react'; import TextField from '@material-ui/core/TextField'; -import { BottomNavigation, BottomNavigationAction } from '@material-ui/core'; +import { BottomNavigation, BottomNavigationAction, Grid, Switch, Typography } from '@material-ui/core'; import FontIcon from '@material-ui/core/Icon'; import Box from '@material-ui/core/Box'; import Dialog from '@material-ui/core/Dialog/Dialog'; import Button from '@material-ui/core/Button'; import MenuItem from '@material-ui/core/MenuItem'; +import IconButton from '@material-ui/core/IconButton'; +import Icon from '@material-ui/core/Icon'; import DialogActions from '@material-ui/core/DialogActions'; import DialogContent from '@material-ui/core/DialogContent'; import DialogContentText from '@material-ui/core/DialogContentText'; import DialogTitle from '@material-ui/core/DialogTitle'; + import { withStyles } from '@material-ui/core/styles'; import { Dimensions, NetPyNEField, NetPyNECoordsRange, NetPyNESelectField, + NetPyNETextField, + ListComponent, + Tooltip, } from 'netpyne/components'; import Utils from '../../../Utils'; +import Checkbox from '../../general/Checkbox'; +import { vars } from '../../../theme'; +import { BASE_PATH } from '../../general/NetPyNEIcons'; +import { evalPythonMessage, execPythonMessage } from '../../general/GeppettoJupyterUtils'; const styles = ({ spacing }) => ({ fields: { @@ -28,8 +38,16 @@ const styles = ({ spacing }) => ({ }, }); +const { textColor, primaryColor, experimentLabelColor } = vars; +const newPulseObject = { + start: 0, + end: 0, + rate: 0, + noise: 0, +}; + class NetPyNEPopulation extends React.Component { - constructor (props) { + constructor(props) { super(props); this.state = { currentName: props.name, @@ -37,15 +55,38 @@ class NetPyNEPopulation extends React.Component { sectionId: 'General', errorMessage: undefined, errorDetails: undefined, + startParam: 'start', + model: undefined }; + + this.updateModel() + } + + updateModel = async (componentName) => { + const name = componentName ? componentName : this.props.name; + const command = `utils.convertToJS(netpyne_geppetto.netParams.popParams['${name}'])` + const response = await execPythonMessage(command) + this.setState({ model: response }) } - UNSAFE_componentWillReceiveProps (nextProps) { + UNSAFE_componentWillReceiveProps(nextProps) { this.setState({ currentName: nextProps.name, selectedIndex: 0, sectionId: 'General', }); + this.updateModel(nextProps.name) + } + + shouldComponentUpdate(nextProps, nextState) { + return ( + this.state.model == undefined + || this.state.currentName != nextState.currentName + || this.state.cellModelFields != nextState.cellModelFields + || this.state.sectionId != nextState.sectionId + || this.state.selectedIndex != nextState.selectedIndex + || this.state.model != nextState.model + ); } getModelParameters = () => { @@ -88,26 +129,16 @@ class NetPyNEPopulation extends React.Component { } modelParameters.push( } - onClick={() => select(3, 'CellList')} + key="Stimulation" + label="Stimulation" + icon={} + onClick={() => select(4, 'Stimulation')} />, ); return modelParameters; }; - shouldComponentUpdate (nextProps, nextState) { - return ( - this.state.model == undefined - || this.state.currentName != nextState.currentName - || this.state.cellModelFields != nextState.cellModelFields - || this.state.sectionId != nextState.sectionId - || this.state.selectedIndex != nextState.selectedIndex - ); - } - handleRenameChange = (event) => { const storedValue = this.props.name; const newValue = Utils.nameValidation(event.target.value); @@ -137,7 +168,7 @@ class NetPyNEPopulation extends React.Component { } }; - triggerUpdate (updateMethod) { + triggerUpdate(updateMethod) { // common strategy when triggering processing of a value change, delay it, every time there is a change we reset if (this.updateTimer != undefined) { clearTimeout(this.updateTimer); @@ -145,7 +176,7 @@ class NetPyNEPopulation extends React.Component { this.updateTimer = setTimeout(updateMethod, 1000); } - postProcessMenuItems (pythonData, selected) { + postProcessMenuItems(pythonData, selected) { return pythonData.map((name) => ( { + this.updateModel() + } + + changeCellPattern = (newValue) => { + if (!newValue) { + execPythonMessage(`del netpyne_geppetto.netParams.popParams['${this.props.name}']['spikePattern']`) + } + else { + execPythonMessage(`netpyne_geppetto.netParams.popParams['${this.props.name}']['spikePattern'] = {} +netpyne_geppetto.netParams.popParams['${this.props.name}']['spikePattern']['type'] = '${newValue}'`) + } + this.updateModel() + } + + handleStartMaxChange = (newValue) => { + const maxIsSet = !(!newValue || newValue === '') + if (maxIsSet) { + const command = ` +pattern = netpyne_geppetto.netParams.popParams['${this.props.name}']['spikePattern'] +pattern['start'], pattern['startMin'] = -1, pattern.get('start', '')` + execPythonMessage(command) + } else { + const command = ` +pattern = netpyne_geppetto.netParams.popParams['${this.props.name}']['spikePattern'] +pattern['start'] = pattern['startMin'] +del pattern['startMin']` + execPythonMessage(command) + } + + this.setState({ + startParam: maxIsSet ? "startMin" : "start" + }) + } + + rhythmicLayout = () => { + return <> + + Start + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + } + + evokedLayout = () => { + return <> + + + + + + + + + + + + + + } + + poissonLayout = () => { + return <> + + + + + + + + + + + } + + gaussLayout = () => { + return <> + + + + + + + + } + + changeStimulationPatternLayout = (pattern) => { + const patternKey = `${pattern}Layout`; + if (!(patternKey in this)) { + return <> + } + return this[patternKey]() + } + + addAnotherPulse = () => { + const command = ` +pulse = {'start': 0, 'end': 0, 'rate': 0, 'noise': 0} +netpyne_geppetto.netParams.popParams['${this.props.name}'].setdefault('pulses', []).append(pulse) +pulse` + execPythonMessage(command).then((_) => { + this.updateModel() + }) + }; + + removePulse = (index) => { + const command = ` +netpyne_geppetto.netParams.popParams['${this.props.name}']['pulses'].pop(${index})` + execPythonMessage(command).then((_) => { + this.updateModel() + }) + } + + displayPulses = () => { + if (!this.state.model || !this.state.model.pulses) { + return <> + } + return this.state.model.pulses.map((pulse, index) => ( + + + this.removePulse(index)}> + + + + + + + + + + + + + + + + + + + + + + + + {/* + this.removePulse(index)} > + + + */} + )) + } + + cellStimulationLayout = () => { + if (!this.state.model) { + return <> + } + if (!["VecStim", "NetStim"].includes(this.state.model.cellModel)) { + return <> + } + return <> + + + + + + + + + Spiking Pulse + + + {this.displayPulses()} + + + + + + + + + + + + + {/* + + */} + + + + + + + {this.changeStimulationPatternLayout(this.state.model?.spikePattern?.type)} + + + + } + + render() { + const { classes } = this.props; const dialogPop = this.state.errorMessage != undefined ? ( @@ -204,6 +599,7 @@ class NetPyNEPopulation extends React.Component {
); - } else if (this.state.sectionId == 'CellList') { + } else if (this.state.sectionId == 'Stimulation') { var content = ( -
Option to provide individual list of cells. Coming soon ...
+ + {/* + + + + + Override stimulation + + Stimulation is automatically set to the same configurations as the VectStim’s stimulation that has been set in ‘Stim. Sources’ + + + + */} + + + + + {this.cellStimulationLayout()} + + {/* + + + + */} + ); } else { var content =
{this.state.cellModelFields}
; diff --git a/webapp/components/definition/populations/NetPyNEPopulations.js b/webapp/components/definition/populations/NetPyNEPopulations.js index 07e4d08a..14a65022 100644 --- a/webapp/components/definition/populations/NetPyNEPopulations.js +++ b/webapp/components/definition/populations/NetPyNEPopulations.js @@ -33,7 +33,7 @@ export default class NetPyNEPopulations extends React.Component { this.handleRenameChildren = this.handleRenameChildren.bind(this); } - handleToggle = () => this.setState({ drawerOpen: !this.state.drawerOpen }); + handleToggle = () => this.setState((prevState) => ({ drawerOpen: !prevState.drawerOpen })); hasSelectedPopulationBeenRenamed (prevState, currentState) { const currentModel = prevState.value; @@ -145,6 +145,7 @@ export default class NetPyNEPopulations extends React.Component { // Get Key and Value const key = Object.keys(defaultPopulationValues)[0]; const value = defaultPopulationValues[key]; + // eslint-disable-next-line react/no-access-state-in-setstate const model = { ...this.state.value }; // Get New Available ID @@ -247,7 +248,7 @@ export default class NetPyNEPopulations extends React.Component { /> )); - var selectedPopulation = undefined; + var selectedPopulation; if ( this.state.selectedPopulation !== undefined && Object.keys(model) diff --git a/webapp/components/definition/stimulationSources/NetPyNEStimulationSource.js b/webapp/components/definition/stimulationSources/NetPyNEStimulationSource.js index a7a56383..0efdd557 100644 --- a/webapp/components/definition/stimulationSources/NetPyNEStimulationSource.js +++ b/webapp/components/definition/stimulationSources/NetPyNEStimulationSource.js @@ -16,9 +16,15 @@ import { NetPyNEField, NetPyNETextField, ListComponent, + NetPyNESelectField } from 'netpyne/components'; import Utils from '../../../Utils'; import Select from '../../general/Select'; +import Checkbox from '../../general/Checkbox'; +import { Grid, Typography } from '@material-ui/core'; +import { vars } from '../../../theme'; + +const { textColor, primaryColor, experimentLabelColor } = vars; const styles = ({ spacing }) => ({ selectField: { @@ -26,7 +32,11 @@ const styles = ({ spacing }) => ({ width: '100%', }, }); - +const newPulseObject = { + start: null, + end: null, + noise: null, +}; class NetPyNEStimulationSource extends React.Component { constructor (props) { super(props); @@ -35,6 +45,9 @@ class NetPyNEStimulationSource extends React.Component { sourceType: 'NetStim', errorMessage: undefined, errorDetails: undefined, + pulses: [{ + ...newPulseObject, + }], }; this.stimSourceTypeOptions = [ { type: 'NetStim' }, @@ -144,6 +157,13 @@ class NetPyNEStimulationSource extends React.Component { this.props.updateCards(); } + addAnotherPulse = () => { + this.setState((prevState) => ({ + ...prevState, // Spread the current state to retain other properties + pulses: [...prevState.pulses, { ...newPulseObject }], // Push the new object into the 'pulses' array + })); + }; + render () { const { classes } = this.props; const dialogPop = this.state.errorMessage != undefined ? ( @@ -417,6 +437,163 @@ class NetPyNEStimulationSource extends React.Component { return ( + {/* + + + + + + + + + + Spiking Pulse / Rate + + + { this.state.pulses.map((pulse, index) => ( + + + + + + + + + + ) + )} + + + + + + + + + + + + + + + + + + + + + + Start + + + + + + + + + + + + + + */}
{ const storedValue = this.props.name; @@ -147,7 +150,7 @@ export default class NetPyNEStimulationTarget extends React.Component { }; postProcessMenuItems = (pythonData, selectedStimSourceName) => { - if ((selectedStimSourceName != Object) & (selectedStimSourceName != '')) { + if ((selectedStimSourceName != Object) && (selectedStimSourceName != '')) { this.isStimSourceTypeNetStim(selectedStimSourceName); } return pythonData.map((name) => ( diff --git a/webapp/components/definition/stimulationTargets/NetPyNEStimulationTargets.js b/webapp/components/definition/stimulationTargets/NetPyNEStimulationTargets.js index 27a1d5a7..afb4e7f9 100644 --- a/webapp/components/definition/stimulationTargets/NetPyNEStimulationTargets.js +++ b/webapp/components/definition/stimulationTargets/NetPyNEStimulationTargets.js @@ -50,6 +50,7 @@ export default class NetPyNEStimulationTargets extends Component { }; const key = Object.keys(defaultStimulationTargets)[0]; const value = defaultStimulationTargets[key]; + // eslint-disable-next-line react/no-access-state-in-setstate const model = { ...this.state.value }; const StimulationTargetId = Utils.getAvailableKey(model, key); const newStimulationTarget = { @@ -93,6 +94,8 @@ export default class NetPyNEStimulationTargets extends Component { } componentDidUpdate (prevProps, prevState) { + if (this.props.commands !== prevProps.commands) + this.forceUpdate(); const newStimulationTargetName = this.hasSelectedStimulationTargetBeenRenamed( prevState, this.state, @@ -275,6 +278,7 @@ export default class NetPyNEStimulationTargets extends Component { overflow: 'visible', display: 'flex', justifyContent: 'center', + borderRadius: '50%', }} > Target diff --git a/webapp/components/definition/subcellConnectivity/NetPyNESubcellsConnectivityRule.js b/webapp/components/definition/subcellConnectivity/NetPyNESubcellsConnectivityRule.js new file mode 100644 index 00000000..75a89c04 --- /dev/null +++ b/webapp/components/definition/subcellConnectivity/NetPyNESubcellsConnectivityRule.js @@ -0,0 +1,541 @@ +import React from 'react'; +import TextField from '@material-ui/core/TextField'; +import FontIcon from '@material-ui/core/Icon'; +import { BottomNavigation, BottomNavigationAction } from '@material-ui/core'; +import Dialog from '@material-ui/core/Dialog/Dialog'; +import Button from '@material-ui/core/Button'; +import DialogActions from '@material-ui/core/DialogActions'; +import DialogContent from '@material-ui/core/DialogContent'; +import DialogContentText from '@material-ui/core/DialogContentText'; +import DialogTitle from '@material-ui/core/DialogTitle'; +import MenuItem from '@material-ui/core/MenuItem'; +import Box from '@material-ui/core/Box'; + +import { + NetPyNESelectField, + NetPyNEField, + NetPyNETextField, + ListComponent, + NetPyNECoordsRange, +} from 'netpyne/components'; +import Select from 'netpyne/components/general/Select'; +import Utils from '../../../Utils'; + +export default class NetPyNESubCellsConnectivityRule extends React.Component { + constructor (props) { + super(props); + this.state = { + currentName: props.name, + selectedIndex: 0, + sectionId: 'General', + errorMessage: undefined, + errorDetails: undefined, + type: undefined, + density: undefined, + coord: undefined, + }; + + this.postProcessDensity = this.postProcessDensity.bind(this); + } + + refreshComponent () { + // get initial values + Utils.evalPythonMessage(`netpyne_geppetto.netParams.subConnParams["${ + this.props.name + }"]`) + .then((response) => { + if ((typeof response === 'object') && (response.density)) { + this.setState({ type: response.density.type, density: response.density }); // splitting so it fires update + } + }); + } + + componentDidUpdate (prevProps, prevState) { + if (JSON.stringify(prevProps.model) != JSON.stringify(this.props.model)) this.refreshComponent(); + } + + componentDidMount () { + this.refreshComponent(); + } + + handleRenameChange = (event) => { + const storedValue = this.props.name; + const newValue = Utils.nameValidation(event.target.value); + const updateCondition = this.props.renameHandler(newValue); + const triggerCondition = Utils.handleUpdate( + updateCondition, + newValue, + event.target.value, + this, + 'ConnectionRule', + ); + + if (triggerCondition) { + this.triggerUpdate(() => { + // Rename the population in Python + Utils.renameKey( + 'netParams.subConnParams', + storedValue, + newValue, + (response, newValue) => { + this.renaming = false; + }, + ); + this.renaming = true; + }); + } + }; + + triggerUpdate (updateMethod) { + // common strategy when triggering processing of a value change, delay it, every time there is a change we reset + // eslint-disable-next-line eqeqeq + if (this.updateTimer !== undefined) { + clearTimeout(this.updateTimer); + } + this.updateTimer = setTimeout(updateMethod, 1000); + } + + select = (index, sectionId) => this.setState({ + selectedIndex: index, + sectionId, + }); + + getBottomNavigationAction (index, sectionId, label, icon, id) { + return ( + } + onClick={() => this.select(index, sectionId)} + /> + ); + } + + postProcessMenuItems (pythonData, selected) { + return pythonData.map((name) => ( + -1} + value={name} + > + {name} + + )); + } + + postProcessDensity (pythonData, selected) { + // TODO: the following line is a hack to handle the pythoncontrolledcapab that sometime return an array and sometime a string + if (typeof selected === 'string' || selected instanceof String) { + this.handleDensity(selected); + } else if (Array.isArray(selected) && selected.length > 0) { + this.handleDensity(selected[selected.length - 1]); + } + return pythonData.map((name) => ( + -1} + value={name} + > + {name} + + )); + } + + UNSAFE_componentWillReceiveProps (nextProps) { + this.setState({ currentName: nextProps.name, type: nextProps.model.density }); + } + + handleDensity (value) { + this.setState({ type: value }); + Utils.execPythonMessage( + `netpyne_geppetto.netParams.subConnParams['${this.props.name}']['density'] = { 'type': '${value}' }`, + ); + } + + handleCoord (value) { + this.setState({ coord: value }); + if (value === 'cartesian') { + Utils.execPythonMessage( + `netpyne_geppetto.netParams.subConnParams['${this.props.name}']['density']['coord'] = '${value}'`, + ); + Utils.execPythonMessage('netpyne_geppetto.netParams.defineCellShapes = True'); + } else { + Utils.execPythonMessage('netpyne_geppetto.netParams.defineCellShapes = False'); + Utils.execPythonMessage( + `del netpyne_geppetto.netParams.subConnParams['${this.props.name}']['density']['coord']`, + ); + } + } + + densityExtraFun () { + switch (this.state.type) { + case '2DMap': + case '1DMap': + Utils.execPythonMessage('netpyne_geppetto.netParams.defineCellShapes = True'); + return ( + <> + + + + {this.state.type === '2DMap' + ? ( + + + + ) : <>} + + + + + + + + + ); + case 'distance': + Utils.execPythonMessage('netpyne_geppetto.netParams.defineCellShapes = False'); + return ( + <> + + + + + + + + + + + + + + ); + default: + Utils.execPythonMessage('netpyne_geppetto.netParams.defineCellShapes = False'); + } + } + + render () { + const densityExtras = this.densityExtraFun(); + const dialogPop = this.state.errorMessage !== undefined ? ( + + + {this.state.errorMessage} + + + + {this.state.errorDetails} + + + + + + + ) : undefined; + + if (this.state.sectionId === 'General') { + var content = ( + + + + + + + pythonData.map((name) => ( + + {name} + + ))} + /> + + + + + + + + + + + {densityExtras} + + {dialogPop} + + ); + } else if (this.state.sectionId === 'Pre Conditions') { + var content = ( + + + + + + + + + + + + + + + + ); + } else if (this.state.sectionId === 'Post Conditions') { + var content = ( + + + + + + + + + + + + + + + + ); + } + + // Generate Menu + let index = 0; + const bottomNavigationItems = []; + bottomNavigationItems.push( + this.getBottomNavigationAction( + index++, + 'General', + 'General', + 'fa-bars', + 'generalConnTab', + ), + ); + bottomNavigationItems.push( + this.getBottomNavigationAction( + index++, + 'Pre Conditions', + 'Pre-synaptic cells conditions', + 'fa-caret-square-o-left', + 'preCondsConnTab', + ), + ); + bottomNavigationItems.push( + this.getBottomNavigationAction( + index++, + 'Post Conditions', + 'Post-synaptic cells conditions', + 'fa-caret-square-o-right', + 'postCondsConnTab', + ), + ); + + return ( +
+ + {bottomNavigationItems} + + {content} +
+ ); + } + + handleChange = (event, index, values) => this.setState({ values }); +} diff --git a/webapp/components/definition/subcellConnectivity/NetPyNESubcellsConnectivityRules.js b/webapp/components/definition/subcellConnectivity/NetPyNESubcellsConnectivityRules.js new file mode 100644 index 00000000..b828eced --- /dev/null +++ b/webapp/components/definition/subcellConnectivity/NetPyNESubcellsConnectivityRules.js @@ -0,0 +1,320 @@ +import React, { Component } from 'react'; +import Dialog from '@material-ui/core/Dialog/Dialog'; + +import Button from '@material-ui/core/Button'; +import { NetPyNEThumbnail, GridLayout, Filter } from 'netpyne/components'; +import Box from '@material-ui/core/Box'; +import Utils from '../../../Utils'; +import NetPyNEHome from '../../general/NetPyNEHome'; +import NetPyNEAddNew from '../../general/NetPyNEAddNew'; + +import NetPyNEConnectivityRule from './NetPyNESubcellsConnectivityRule'; + +import RulePath from '../../general/RulePath'; +import Accordion from '../../general/ExpansionPanel'; + +export default class NetPyNESubCellsConnectivityRules extends Component { + constructor (props) { + super(props); + this.state = { + drawerOpen: false, + selectedConnectivityRule: undefined, + deletedConnectivityRule: undefined, + page: 'main', + errorMessage: undefined, + errorDetails: undefined, + filterValue: null, + }; + + this.selectPage = this.selectPage.bind(this); + + this.selectConnectivityRule = this.selectConnectivityRule.bind(this); + this.handleNewConnectivityRule = this.handleNewConnectivityRule.bind(this); + + this.handleRenameChildren = this.handleRenameChildren.bind(this); + } + + handleToggle = () => this.setState((prevState) => ({ drawerOpen: !prevState.drawerOpen })); + + selectPage (page) { + this.setState({ page }); + } + + /* Method that handles button click */ + selectConnectivityRule (connectivityRule) { + this.setState({ selectedConnectivityRule: connectivityRule }); + } + + handleNewConnectivityRule () { + const defaultConnectivityRules = { + ConnectivityRule: { + preConds: {}, + postConds: {}, + }, + }; + // Get Key and Value + const key = Object.keys(defaultConnectivityRules)[0]; + const value = defaultConnectivityRules[key]; + // eslint-disable-next-line react/no-access-state-in-setstate + const model = { ...this.state.value }; + + // Get New Available ID + const connectivityRuleId = Utils.getAvailableKey(model, key); + const newConnectivityRule = { + name: connectivityRuleId, + ...value, + }; + // Create Cell Rule Client side + Utils.execPythonMessage( + `netpyne_geppetto.netParams.subConnParams["${ + connectivityRuleId + }"] = ${ + JSON.stringify(value)}`, + ); + model[connectivityRuleId] = newConnectivityRule; + // Update state + this.setState({ + value: model, + selectedConnectivityRule: connectivityRuleId, + }); + } + + hasSelectedConnectivityRuleBeenRenamed (prevState, currentState) { + const currentModel = prevState.value; + const model = currentState.value; + // deal with rename + if (currentModel != undefined && model != undefined) { + const oldP = Object.keys(currentModel); + const newP = Object.keys(model); + if (oldP.length == newP.length) { + // if it's the same lenght there could be a rename + for (let i = 0; i < oldP.length; i++) { + if (oldP[i] != newP[i]) { + if (prevState.selectedConnectivityRule != undefined) { + if (oldP[i] == prevState.selectedConnectivityRule) { + return newP[i]; + } + } + } + } + } + } + return undefined; + } + + componentDidUpdate (prevProps, prevState) { + // we need to check if any of the three entities have been renamed and if that's the case change the state for the selection variable + const newConnectivityRuleName = this.hasSelectedConnectivityRuleBeenRenamed( + prevState, + this.state, + ); + if (newConnectivityRuleName !== undefined) { + this.setState({ + selectedConnectivityRule: newConnectivityRuleName, + deletedConnectivityRule: undefined, + }); + } else if ( + prevState.value !== undefined + && Object.keys(prevState.value).length + !== Object.keys(this.state.value).length + ) { + /* + * logic into this if to check if the user added a new object from the python backend and + * if the name convention pass the checks, differently rename this and open dialog to inform. + */ + const model = this.state.value; + for (var m in model) { + if (prevState.value !== '' && !(m in prevState.value)) { + var newValue = Utils.nameValidation(m); + if (newValue != m) { + newValue = Utils.getAvailableKey(model, newValue); + model[newValue] = model[m]; + delete model[m]; + this.setState( + { + value: model, + errorMessage: 'Error', + errorDetails: + `Leading digits or whitespaces are not allowed in ConnectivityRule names.\n${ + m + } has been renamed ${ + newValue}`, + }, + () => { + Utils.renameKey( + 'netParams.subConnParams', + m, + newValue, + (response, newValue) => { + }, + ); + }, + ); + } + } + } + } + } + + shouldComponentUpdate (nextProps, nextState) { + const itemRenamed = this.hasSelectedConnectivityRuleBeenRenamed(this.state, nextState) + !== undefined; + let newItemCreated = false; + const selectionChanged = this.state.selectedConnectivityRule != nextState.selectedConnectivityRule; + const pageChanged = this.state.page != nextState.page; + const newModel = this.state.value == undefined; + if (!newModel) { + newItemCreated = Object.keys(this.state.value).length + != Object.keys(nextState.value).length; + } + const errorDialogOpen = this.state.errorDetails !== nextState.errorDetails; + const filterValueChanged = nextState.filterValue !== this.state.filterValue; + return ( + filterValueChanged + || newModel + || newItemCreated + || itemRenamed + || selectionChanged + || pageChanged + || errorDialogOpen + ); + } + + handleRenameChildren (childName) { + childName = childName.replace(/\s*$/, ''); + const childrenList = Object.keys(this.state.value); + for (let i = 0; childrenList.length > i; i++) { + if (childName === childrenList[i]) { + return false; + } + } + return true; + } + + getCopyPath () { + const { + value: model, + selectedConnectivityRule, + } = this.state; + return ( + model + && model[selectedConnectivityRule] + && `netParams.subConnParams["${selectedConnectivityRule}"]` + ); + } + + render () { + const actions = [ + + +
+ + + + setTrialNumberErrorDialogOpen({ condition: false, number: 1 })} + textForDialog={{ + heading: 'Error - Number of conditions is too large', + content: `Please change your exploration parameters to + reduce the number of experimental conditions to less than 100. Last number of conditions: ${trialNumberErrorDialogOpen.number}`, + }} + /> + + ); +}; + +export default withStyles(useStyles)(ExperimentEdit); diff --git a/webapp/components/experiments/ExperimentEditStyle.js b/webapp/components/experiments/ExperimentEditStyle.js new file mode 100644 index 00000000..ca2bcbc8 --- /dev/null +++ b/webapp/components/experiments/ExperimentEditStyle.js @@ -0,0 +1,242 @@ +import { + bgDarkest, + bgLight, + bgRegular, + secondaryColor, + fontColor, + radius, + primaryColor, + experimentInputColor, + experimentFieldColor, + experimentSvgColor, + experimentLabelColor, + experimentAutocompleteBorder, + errorFieldBorder, +} from '../../theme'; + +/** + * Edit/Add view of a single Experiment. + * + * @return {JSX.Element} + * @constructor + */ +const useStyles = (theme) => ({ + root: { + '& .editExperimentContainer': { + '& .editExperimentContent': { + overflow: 'auto', + maxHeight: 'calc(100vh - 400px)', + '& .MuiTypography-body2': { + opacity: '0.54', + }, + }, + }, + '& .editExperimentBack': { + display: 'flex', + cursor: 'pointer', + paddingLeft: theme.spacing(1), + '& .MuiTypography-root': { + marginLeft: theme.spacing(1), + }, + }, + '& .editExperimentBreadcrumb': { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + '& .MuiButton-startIcon': { + marginRight: theme.spacing(0.4), + }, + }, + '& .editExperimentAutocomplete': { + '& .MuiInputLabel-outlined.MuiInputLabel-shrink': { + transform: 'translate(14px, 9px) scale(0.75)', + }, + '& .MuiAutocomplete-input': { + padding: '1rem 0.25rem 0.188rem', + }, + }, + '& .editExperimentList': { + display: 'flex', + marginBottom: theme.spacing(1), + width: '100%', + }, + '& .MuiTypography-body2': { + fontSize: '1rem', + }, + '& .editExperimentDefault': { + paddingLeft: theme.spacing(1), + overflow: 'auto', + }, + '& .editExperimentHead': { + paddingLeft: theme.spacing(1), + }, + '& .editExperimentGroup': { + background: bgDarkest, + borderRadius: theme.spacing(0.4), + padding: theme.spacing(2, 0), + '& .scrollbar': { + '&::-webkit-scrollbar-thumb': { + background: secondaryColor, + borderLeft: `${radius} solid ${bgDarkest}`, + borderRight: `${radius} solid ${bgDarkest}`, + }, + '&::-webkit-scrollbar': { + width: theme.spacing(2), + }, + }, + '& .editExperimentBreadcrumb': { + paddingLeft: '0.625rem', + }, + '& .editExperimentRow': { + paddingLeft: theme.spacing(4), + position: 'relative', + overflow: 'auto', + maxHeight: '25vh', + '&:before': { + background: bgLight, + content: '""', + height: '100%', + width: '0.125rem', + margin: 0, + display: 'block', + position: 'absolute', + left: '0.875rem', + }, + }, + '& .MuiFilledInput-root': { + background: experimentFieldColor, + }, + '& .MuiOutlinedInput-root': { + background: experimentFieldColor, + }, + }, + '& .MuiAutocomplete-root': { + width: '100% !important', + }, + '& .MuiPopover-root': { + '& .MuiPaper-root': { + '& .MuiList-root': { + '& .MuiMenuItem-gutters': { + paddingLeft: theme.spacing(2), + paddingRight: theme.spacing(2), + }, + }, + }, + }, + '& .MuiPopover-experiment': { + width: theme.spacing(14), + }, + '& .MuiFormControl-root': { + width: '100%', + }, + '& .MuiOutlinedInput-root': { + background: experimentInputColor, + }, + '& .MuiFilledInput-root': { + borderRadius: radius, + background: experimentInputColor, + border: '1px solid transparent', + '&.Mui-error': { + borderColor: errorFieldBorder, + boxShadow: '0 0 0 2px rgba(242, 69, 61, 0.2)', + }, + }, + '& .MuiOutlinedInput-notchedOutline': { + border: '0 !important', + }, + '& .MuiFilledInput-underline': { + '&:after, &:before': { + display: 'none', + }, + }, + '& .MuiFormLabel-root': { + fontWeight: 'normal', + color: fontColor, + opacity: '0.54', + '&.MuiInputLabel-shrink': { + color: experimentLabelColor, + opacity: '0.87', + }, + }, + '& .MuiTypography-colorPrimary': { + borderBottom: `${primaryColor} 1px solid`, + display: 'inline-flex', + color: primaryColor, + cursor: 'pointer', + marginLeft: theme.spacing(1), + '&:hover': { + textDecoration: 'none', + }, + '& .MuiSvgIcon-root': { + fontSize: '1rem', + marginTop: theme.spacing(0.4), + }, + }, + '& .editExperimentFooter': { + position: 'absolute', + left: 0, + bottom: 0, + right: 0, + display: 'flex', + justifyContent: 'flex-end', + alignItems: 'center', + background: bgRegular, + boxShadow: '0 -7px 13px -4px rgb(0, 0, 0, 0.6)', + padding: theme.spacing(2.5), + zIndex: 100, + '& .MuiButton-root': { + minWidth: theme.spacing(11), + padding: theme.spacing(0.4), + marginLeft: theme.spacing(1), + borderRadius: '2px', + cursor: 'pointer', + textTransform: 'uppercase', + }, + '& .MuiButton-textSecondary': { + color: fontColor, + }, + }, + '& .editExperimentWarning': { + paddingLeft: '0.625rem', + '& .MuiTypography-root': { + color: experimentLabelColor, + }, + '& .MuiTypography-caption': { + fontSize: '0.875rem', + }, + }, + '& .editExperimentField': { + '& .MuiFormControl-root': { + overflow: 'hidden', + '& .MuiFormLabel-root': { + whiteSpace: 'noWrap', + }, + }, + }, + '& .MuiFormHelperText-contained': { + marginLeft: 0, + }, + '& .MuiFormHelperText-root': { + fontSize: '0.875rem', + lineHeight: '100%', + }, + }, + popper: { + marginTop: -theme.spacing(1), + '& .MuiPaper-root': { + boxShadow: '0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12)', + borderRadius: `0 0 ${radius} ${radius}`, + borderTop: `1px solid ${experimentAutocompleteBorder}`, + }, + '& .MuiSvgIcon-root': { + color: experimentSvgColor, + }, + '& .MuiAutocomplete-option': { + paddingLeft: theme.spacing(2), + color: fontColor, + paddingRight: theme.spacing(1), + }, + }, +}); + +export default useStyles; diff --git a/webapp/components/experiments/ExperimentHelper.js b/webapp/components/experiments/ExperimentHelper.js new file mode 100644 index 00000000..d7902bc8 --- /dev/null +++ b/webapp/components/experiments/ExperimentHelper.js @@ -0,0 +1,137 @@ +import { REAL_TYPE } from '../../constants'; + +/** + * Converts a value based on `type` of the netpyne metadata `field`. + * + * @param {*} field metadata field of netpyne. + * @param {*} value value to be converted to proper type. + * @returns value converted to `type`. + */ +export const convertFieldValue = (field, value) => { + if (field == null) { + return value; + } + + switch (field.type) { + case REAL_TYPE.INT: + case REAL_TYPE.FLOAT: + case REAL_TYPE.FUNC: + return Number(value); + + case REAL_TYPE.STR: + return String(value); + + case REAL_TYPE.BOOL: + return Boolean(value); + + case REAL_TYPE_FLOAT: + return validLocale(value); + + default: + // .. handling of more types + // list(float), dict, list(list(float)), func + return value; + } +}; + +function getLocale() { + if (navigator.languages != undefined) + return navigator.languages[0]; + return navigator.language; +} +function validLocale(num) { + const locale = getLocale(); + return Intl.NumberFormat(locale).format(num); +} + +export const isValidValue = (value, type) => { + if (type == null) { + return false; + } + + let validate; + + switch (type) { + case REAL_TYPE.INT: + validate = (el) => el !== '' && !Number.isNaN(Number(el)) && Number.isInteger(Number(el)); + break; + + case REAL_TYPE.FLOAT: + validate = (el) => el !== '' && !Number.isNaN(Number(el)); + break; + + case REAL_TYPE.STR: + validate = (el) => String(el); + break; + + case REAL_TYPE.BOOL: + validate = (el) => Boolean(el); + break; + + case REAL_TYPE.FUNC: + // const valid = await Utils.evalPythonMessage('netpyne_geppetto.validateFunction', [el]); + validate = (el) => true; + break; + + default: + // .. handling of more types + // list(float), dict, list(list(float)), func + validate = (el) => false; + break; + } + + return validate(value); +}; + +export const getErrorText = (type) => { + switch (type) { + case REAL_TYPE.INT: + return 'Only integer values are allowed'; + + case REAL_TYPE.FLOAT: + return 'Float or int values allowed'; + + case REAL_TYPE.STR: + return 'Only string values are allowed'; + + case REAL_TYPE.BOOL: + return 'Only bool values (true|false) are allowed'; + + case REAL_TYPE.FUNC: + return 'Not a valid function'; + + default: + // .. handling of more types + // list(float), dict, list(list(float)), func + return 'Unkown error, field type is not supported'; + } +}; + +export const validateListParameter = (parameter) => { + let { values } = parameter; + const { field } = parameter; + + const validValue = values.every((element) => isValidValue(element, field?.type)); + if (validValue) { + values = values.map((el) => convertFieldValue(field, el)); + } + + return { + ...parameter, + values, + error: !validValue, + helperText: validValue ? '' : getErrorText(parameter.field.type), + }; +}; + +export const validateRangeParameter = (parameter, val, key) => { + const validValue = isValidValue(val, parameter.field ? parameter.field.type : null); + + return { + ...parameter, + [`${key}Val`]: val, + [key]: validValue ? convertFieldValue(parameter.field, val) : val, + [`${key}error`]: !validValue, + [`${key}helperText`]: validValue ? '' : getErrorText(parameter?.field?.type), + }; +}; diff --git a/webapp/components/experiments/ExperimentManager.js b/webapp/components/experiments/ExperimentManager.js new file mode 100644 index 00000000..26f0b033 --- /dev/null +++ b/webapp/components/experiments/ExperimentManager.js @@ -0,0 +1,63 @@ +import React, { useState } from 'react'; +import { Experiments, ExperimentEdit } from '../index'; + +import ViewExperiment from './ExperimentView'; +import JsonViewer from '../general/JsonViewer'; +import { EXPERIMENT_VIEWS } from '../../constants'; + +const ExperimentManager = (props) => { + const [editState, setEditState] = useState(false); + const [experimentName, setExperimentName] = useState(null); + const [trial, setTrial] = useState(null); + const [trialJSON, setTrialJSON] = useState(null); + const [view, setView] = useState(EXPERIMENT_VIEWS.list); + + + const viewHandler = () => { + switch (view) { + case EXPERIMENT_VIEWS.list: return ( + + ); + case EXPERIMENT_VIEWS.viewExperiment: return ( + + ); + case EXPERIMENT_VIEWS.jsonViewer: return ( + + ); + case EXPERIMENT_VIEWS.edit: return ( + + ); + + default: return ( + + ); + } + }; + return ( + <>{ viewHandler() } + ); +}; + +export default ExperimentManager; diff --git a/webapp/components/experiments/ExperimentRowFilter.js b/webapp/components/experiments/ExperimentRowFilter.js new file mode 100644 index 00000000..f24e7297 --- /dev/null +++ b/webapp/components/experiments/ExperimentRowFilter.js @@ -0,0 +1,201 @@ +import React from 'react'; +import { withStyles } from '@material-ui/core/styles'; +import { + Popover, + InputLabel, + MenuItem, + FormControl, + Select, + Link, + Box, + Grid, + TextField, + IconButton, +} from '@material-ui/core'; +import AddIcon from '@material-ui/icons/Add'; +import DeleteIcon from '@material-ui/icons/Delete'; +import { + fontColor, + primaryColor, + secondaryColor, + radius, + experimentGrey, + experimentInputColor, + experimentLabelColor, + errorFieldBorder, +} from '../../theme'; + +const useStyles = (theme) => ({ + root: { + '& .filter-row': { + display: 'flex', + alignItems: 'center', + '& .MuiGrid-root': { + paddingRight: theme.spacing(1), + flexGrow: 1, + }, + }, + '& .MuiSvgIcon-delete': { + borderRadius: theme.spacing(0.4), + alignSelf: 'center', + color: experimentGrey, + marginLeft: 'auto', + marginRight: 'auto', + padding: `${theme.spacing(0.6)}px ${theme.spacing(1)}px`, + '& svg': { + fontSize: '1.3rem', + }, + }, + '&.MuiPopover-filter': { + '& .MuiPopover-paper': { + '&::-webkit-scrollbar-thumb': { + background: secondaryColor, + height: '0.5rem', + borderRadius: '0.5rem', + }, + '&::-webkit-scrollbar': { + width: '0.5rem', + height: '0.5rem', + borderRadius: '0.5rem', + }, + }, + '& .popoverFormControl': { + width: '40rem', + padding: '1rem', + '& .MuiLink-root': { + color: primaryColor, + display: 'inline-flex', + alignItems: 'center', + fontSize: '1rem', + cursor: 'pointer', + borderBottom: `1px solid ${primaryColor}`, + '&:hover': { + textDecoration: 'none', + }, + '& .MuiSvgIcon-root': { + fontSize: '1.1rem', + marginRight: '0.15rem', + marginLeft: '-0.15rem', + }, + }, + '& .MuiOutlinedInput-root': { + background: experimentInputColor, + }, + '& .MuiFormControl-fullWidth': { + marginBottom: '0.5rem', + }, + '& .MuiFilledInput-root': { + borderRadius: radius, + background: experimentInputColor, + border: '1px solid transparent', + '&.Mui-error': { + borderColor: errorFieldBorder, + boxShadow: '0 0 0 2px rgba(242, 69, 61, 0.2)', + }, + }, + '& .MuiOutlinedInput-notchedOutline': { + border: '0 !important', + }, + '& .MuiFilledInput-underline': { + '&:after, &:before': { + display: 'none', + }, + }, + '& .MuiFormLabel-root': { + fontWeight: 'normal', + color: fontColor, + opacity: '0.54', + '&.MuiInputLabel-shrink': { + color: experimentLabelColor, + opacity: '0.87', + }, + }, + }, + }, + }, +}); + +const ExperimentRowFilter = (props) => { + const { + filter, + paramHeaders, + setParameterValue, + filterParameterChange, + anchorEl, + setAnchorEl, + classes, + addFilterRow, + removeFilter, + } = props; + + const open = Boolean(anchorEl); + const id = open ? 'simple-popover' : undefined; + const popoverhandleClose = () => { + setAnchorEl(null); + }; + + return ( + + + {filter.map((paramFilter, index) => ( + + + + + Parameter + + + + + + setParameterValue(e.target.value, index)} + /> + + + + removeFilter(index)}> + + + + ))} + + + + Add Filter + + + + + ); +}; + +export default withStyles(useStyles)(ExperimentRowFilter); diff --git a/webapp/components/experiments/ExperimentView.js b/webapp/components/experiments/ExperimentView.js new file mode 100644 index 00000000..c7208acd --- /dev/null +++ b/webapp/components/experiments/ExperimentView.js @@ -0,0 +1,662 @@ +import React, { useState, useEffect } from 'react'; +import { withStyles } from '@material-ui/core/styles'; +import PropTypes from 'prop-types'; +import { + Box, + Table, + TableBody, + Button, + IconButton, + TableCell, + TableHead, + TableRow, + TableSortLabel, + TableContainer, + Divider, + Typography, + TablePagination, +} from '@material-ui/core'; +import ArrowBackIcon from '@material-ui/icons/ArrowBack'; +import CodeIcon from '@material-ui/icons/Code'; +import ReplayIcon from '@material-ui/icons/Replay'; +import AssessmentIcon from '@material-ui/icons/Assessment'; +import ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown'; +import FilterListIcon from '@material-ui/icons/FilterList'; +import { EXPERIMENT_TEXTS, EXPERIMENT_VIEWS } from 'root/constants'; +import DialogBox from 'root/components/general/DialogBox'; +import { useDispatch } from 'react-redux'; +import { viewExperimentResults, loadTrialModelSpec } from 'root/redux/actions/experiments'; +import * as ExperimentsApi from 'root/api/experiments'; +import Tooltip from 'root/components/general/Tooltip'; +import { + bgRegular, + bgDarker, + bgLight, + canvasBgLight, + bgInputs, + primaryColor, + experimentGrey, + secondaryColor, + fontColor, +} from '../../theme'; +import ExperimentRowFilter from './ExperimentRowFilter'; +import { stableSort, getComparator } from './utils'; +import Loader from '../general/Loader'; +import { EXPERIMENT_STATE } from '../../constants'; + +const useStyles = (theme) => ({ + table: { + minWidth: 650, + }, + sticky: { + position: 'sticky', + left: 0, + zIndex: 50, + }, + stickyRight: { + position: 'sticky', + right: 0, + textAlign: 'right', + '& .MuiSortIcon': { + display: 'none', + }, + }, + root: { + width: 'auto !important', + flexDirection: 'column', + marginLeft: -theme.spacing(1), + marginRight: -theme.spacing(1), + + '& .primary-loader': { + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + flexDirection: 'column', + fontWeight: '500', + color: fontColor, + fontSize: '1rem', + height: '30rem', + }, + + '& .editExperiment-filter': { + display: 'flex', + alignItems: 'center', + + '& .MuiSvgIcon-replay': { + transform: 'rotate(-65deg)', + }, + '& .MuiButton-root': { + minWidth: 'inherit', + marginLeft: theme.spacing(1.2), + }, + }, + '& .MuiTablePagination-root': { + overflow: 'initial', + + '& .MuiTypography-body2': { + fontSize: '0.875rem', + }, + }, + '& .MuiTablePagination-select': { + fontSize: '0.875rem', + color: experimentGrey, + paddingTop: theme.spacing(0), + paddingBottom: theme.spacing(0), + }, + '& .MuiTablePagination-selectRoot': { + '& .MuiSelect-icon': { + color: experimentGrey, + }, + }, + '& .MuiTablePagination-actions': { + paddingRight: theme.spacing(3), + '& .MuiIconButton-root': { + padding: '0.25rem', + marginLeft: theme.spacing(2.6), + color: experimentGrey, + '&.Mui-disabled': { + opacity: 0.3, + }, + '&:hover': { + borderRadius: theme.spacing(0.4), + }, + }, + }, + '& .ViewExperimentHead': { + paddingLeft: theme.spacing(4), + paddingRight: theme.spacing(4), + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + }, + '& .editExperiment-trials': { + display: 'flex', + alignItems: 'center', + justifyContent: 'flex-end', + background: bgDarker, + padding: theme.spacing(1, 4), + '& .MuiTypography-h5': { + fontSize: '1rem', + color: fontColor, + marginLeft: theme.spacing(1), + marginRight: theme.spacing(0.5), + }, + }, + '& .editExperimentBack': { + display: 'flex', + cursor: 'pointer', + '& .MuiTypography-root': { + marginLeft: theme.spacing(1), + }, + }, + '& .MuiTypography-body2': { + fontSize: '1rem', + }, + '& .MuiDivider-vertical': { + height: theme.spacing(4), + background: 'rgba(255, 255, 255, 0.3)', + }, + '& .MuiTableContainer-root': { + '&::-webkit-scrollbar-thumb': { + background: secondaryColor, + height: theme.spacing(0.8), + }, + '&::-webkit-scrollbar': { + width: theme.spacing(0.8), + height: theme.spacing(0.8), + }, + '& .MuiTableCell-root': { + padding: theme.spacing(1.4, 4), + '&:first-child': { + '& .MuiSortIcon': { + display: 'none', + }, + }, + }, + '& .MuiTableRow-colspan': { + '& .MuiTableCell-root': { + background: bgDarker, + padding: theme.spacing(1), + }, + '& .MuiBox-root': { + display: 'flex', + alignItems: 'center', + fontSize: '0.75rem', + fontWeight: '500', + color: experimentGrey, + '& .MuiSvgIcon-root': { + fontSize: '0.813rem', + marginRight: theme.spacing(1), + }, + }, + }, + '& .MuiTableCell-actions': { + display: 'flex', + alignItems: 'center', + justifyContent: 'flex-end', + '& .MuiIconButton-root': { + padding: '0.25rem', + marginLeft: theme.spacing(2.6), + color: experimentGrey, + '&:hover': { + borderRadius: theme.spacing(0.4), + }, + }, + '& .MuiDivider-root': { + marginLeft: theme.spacing(2.6), + }, + '& .MuiSvgIcon-assessment': { + color: primaryColor, + }, + '& .MuiSvgIcon-replay': { + fontSize: '1.2rem', + transform: 'rotate(-65deg)', + }, + }, + '& .MuiTableRow-head': { + '& .MuiTableSortLabel-icon': { + display: 'none', + }, + '& .MuiSortIcon': { + '&[direction="desc"]': { + transform: 'rotate(180deg)', + }, + }, + '& .MuiTableCell-root': { + background: bgLight, + color: experimentGrey, + fontWeight: '700', + whiteSpace: 'nowrap', + borderBottom: `1px solid ${bgInputs}`, + }, + }, + '& .MuiTableRow-root': { + '& .MuiTableCell-root': { + color: experimentGrey, + fontWeight: '700', + background: bgRegular, + fontSize: '0.875rem', + }, + }, + '& .MuiTableBody-root': { + '& .MuiTableCell-root': { + '&.MuiTableCell-paddingNone': { + color: canvasBgLight, + fontSize: '1rem', + fontWeight: '500', + }, + }, + }, + }, + }, +}); + +function EnhancedTableHead (props) { + const { + order, + orderBy, + onRequestSort, + classes, + paramHeaders, + experimentFinished, + } = props; + const createSortHandler = (property) => (event) => { + onRequestSort(event, property); + }; + + const headCells = [ + { + id: 'name', + numeric: false, + disablePadding: true, + label: 'EXPERIMENTAL CONDITIONS', + }, + ...paramHeaders, + ]; + + if (experimentFinished) { + headCells.push({ + id: 'status', + numeric: false, + disablePadding: false, + label: 'Actions', + }); + } + + return ( + + + {headCells.map((headCell, index) => ( + + + {headCell.label} + + + + ))} + + + ); +} + +EnhancedTableHead.propTypes = { + onRequestSort: PropTypes.func.isRequired, + order: PropTypes.oneOf(['asc', 'desc']).isRequired, + orderBy: PropTypes.string.isRequired, +}; + +const ExperimentView = (props) => { + const { + classes, + name, + setTrial, + setTrialJSON, + setView, + } = props; + const dispatch = useDispatch(); + const [order, setOrder] = useState('asc'); + const [orderBy, setOrderBy] = useState('name'); + const [tableRows, setTableRows] = useState([]); + const [filteredRows, setFilteredRows] = useState(tableRows); + const [experiment, setExperiment] = useState(null); + const [paramHeaders, setParamHeaders] = useState([]); + const [page, setPage] = useState(0); + const [rowsPerPage, setRowsPerPage] = useState(10); + const [loadResultsDialogOpen, setLoadResultsDialogOpen] = useState(false); + const [loadModelSpecDialogOpen, setLoadModelSpecDialogOpen] = useState(false); + const [selectedTrial, setSelectedTrial] = useState({ + experiment: null, + trial: null, + }); + const [loading, setLoading] = useState(false); + + const experimentFinished = experiment?.state === EXPERIMENT_STATE.SIMULATED || experiment?.state === EXPERIMENT_STATE.INSTANTIATED; + + const handleRequestSort = (event, property) => { + const isAsc = orderBy === property && order === 'asc'; + setOrder(isAsc ? 'desc' : 'asc'); + setOrderBy(property); + }; + + const [anchorEl, setAnchorEl] = useState(''); + const popoverhandleClick = (event) => { + setAnchorEl(event.currentTarget); + }; + + const filterObj = { + param: '', + value: '', + }; + const [filter, setFilter] = useState([filterObj]); + + const addFilterRow = () => { + setFilter([...filter, filterObj]); + }; + + const filterRows = (arr, criteria) => { + let count; + const filterWithoutEmpties = criteria.filter((f) => f.param && f.value); + if (filterWithoutEmpties.length > 0) { + // Helper function to loop through the filter criteria to find matching values + // Each filter criteria is treated as "AND" + const matchesFilter = (item) => { + count = 0; + // for filtering consider only those filter criterias where both parameter + // and value has been provided + filterWithoutEmpties.forEach((f) => { + if (Number(f.value) === item[f.param]) { + count += 1; + } + }); + // If TRUE, then the current item in the array meets all the filter criteria + return count === filterWithoutEmpties.length; + }; + return arr.filter((item) => matchesFilter(item)); + } + return arr; + }; + + const setParameterValue = (val, index) => { + const newFilter = [...filter]; + newFilter[index] = { + ...filter[index], + value: val, + }; + setPage(0); + setFilter(newFilter); + setFilteredRows(filterRows(tableRows, newFilter)); + }; + + const filterParameterChange = (val, index) => { + const newFilter = [...filter]; + newFilter[index] = { + param: val, + value: '', + }; + setFilter(newFilter); + }; + + useEffect(() => { + if (name) { + setLoading(true); + ExperimentsApi.getExperiment(name) + .then((exp) => { + setExperiment(exp); + if (exp?.trials.length > 0) { + if (exp?.trials[0].params.length > 0) { + setParamHeaders( + Object.keys(exp?.trials[0]?.params[0]) + .map((header) => ({ + id: header, + numeric: true, + disablePadding: false, + label: header, + })), + ); + } + + const rows = exp?.trials.map((trial, _) => ({ + id: trial.id, + name: trial.name, + ...trial.params.length > 0 ? trial.params[0] : [], + })); + + setTableRows(rows); + setFilteredRows(rows); + } + setLoading(false); + }) + .catch((error) => console.error(error)); + } + }, [name]); + + const openJsonViewer = (experiment, trial) => { + setLoading(true); + ExperimentsApi.getModelSpecification(experiment, trial.id) + .then((modelSpecification) => { + setTrialJSON(modelSpecification); + setTrial(trial.name); + setLoading(false); + setView(EXPERIMENT_VIEWS.jsonViewer); + }); + }; + + const handleChangePage = (event, newPage) => { + setPage(newPage); + }; + + const handleChangeRowsPerPage = (event) => { + setRowsPerPage(parseInt(event.target.value, 10)); + setPage(0); + }; + + const removeFilter = (filterIndex) => { + const newFilter = [...filter]; + newFilter.splice(filterIndex, 1); + setPage(0); + setFilter(newFilter); + setFilteredRows(filterRows(tableRows, newFilter)); + }; + + const openLoadResultsDialog = (experimentName, trial) => { + setSelectedTrial({ + experiment: experimentName, + trial, + }); + setLoadResultsDialogOpen(true); + }; + + const openLoadModelSpecificationDialog = (experimentName, trial) => { + setSelectedTrial({ + experiment: experimentName, + trial, + }); + setLoadModelSpecDialogOpen(true); + }; + + const onLoadResultsAction = (actionConfirmed) => { + if (actionConfirmed) { + dispatch(viewExperimentResults({ + name: selectedTrial.experiment, + trial: selectedTrial.trial, + })); + } + setSelectedTrial(null); + setLoadResultsDialogOpen(false); + }; + + const onLoadModelSpecificationAction = (actionConfirmed) => { + if (actionConfirmed) { + dispatch(loadTrialModelSpec({ + name: selectedTrial.experiment, + trial: selectedTrial.trial, + onlyModelSpecification: true, + })); + } + setSelectedTrial(null); + setLoadModelSpecDialogOpen(false); + }; + + return ( +
+ + + setView(EXPERIMENT_VIEWS.list)} /> + {experiment?.name} + +
+ {/* */} +
+
+ {loading ? ( + + + Loading ... + + ) : ( + experiment?.trials && ( + <> + +
+ + +
+
+ + + + + {stableSort(filteredRows, getComparator(order, orderBy)) + .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage) + .map((row) => ( + + + {row.name} + + {paramHeaders.map((header, index) => ( + + {row[header.label]} + + ))} + {experimentFinished && ( + + + + openLoadResultsDialog(experiment?.name, row)} + > + + + + + + openJsonViewer(experiment?.name, row)}> + + + + + openLoadModelSpecificationDialog(experiment?.name, row)}> + + + + + + )} + + ))} + +
+
+ {filteredRows.length > 0 && ( + + )} + + + + + ) + )} +
+ ); +}; + +ExperimentView.propTypes = { + name: PropTypes.string.isRequired, + setTrial: PropTypes.func.isRequired, + setTrialJSON: PropTypes.func.isRequired, + setView: PropTypes.func.isRequired, +}; + +export default withStyles(useStyles)(ExperimentView); diff --git a/webapp/components/experiments/Experiments.js b/webapp/components/experiments/Experiments.js new file mode 100644 index 00000000..2df669eb --- /dev/null +++ b/webapp/components/experiments/Experiments.js @@ -0,0 +1,314 @@ +import React, { useEffect, useState } from 'react'; +import Box from '@material-ui/core/Box'; +import Table from '@material-ui/core/Table'; +import TableBody from '@material-ui/core/TableBody'; +import TableCell from '@material-ui/core/TableCell'; +import TableContainer from '@material-ui/core/TableContainer'; +import TableRow from '@material-ui/core/TableRow'; +import Paper from '@material-ui/core/Paper'; +import DeleteIcon from '@material-ui/icons/Delete'; +import EditIcon from '@material-ui/icons/Edit'; +import Chip from '@material-ui/core/Chip'; +import CancelRoundedIcon from '@material-ui/icons/CancelRounded'; +import FileCopyOutlinedIcon from '@material-ui/icons/FileCopyOutlined'; +import ChevronRightIcon from '@material-ui/icons/ChevronRight'; +import Button from '@material-ui/core/Button'; +import Typography from '@material-ui/core/Typography'; +import Divider from '@material-ui/core/Divider'; +import AddIcon from '@material-ui/icons/Add'; +import { + GridLayout, + +} from 'netpyne/components'; +import { withStyles } from '@material-ui/core/styles'; + +import Utils from '../../Utils'; +import { + EXPERIMENT_STATE, EXPERIMENT_TEXTS, EXPERIMENT_VIEWS, +} from '../../constants'; +import DialogBox from '../general/DialogBox'; +import { experimentGrey, experimentInputColor } from '../../theme'; + +const useStyles = (theme) => ({ + root: { + '& .scrollDiv': { + overflow: 'auto', + }, + '& .MuiTableContainer-root': { + maxHeight: 'calc(100% -60vh)', + overflow: 'auto', + '&::-webkit-scrollbar': { + height: theme.spacing(1), + }, + '& .MuiTable-root': { + '& .experimentHead': { + fontSize: '1rem', + }, + '& .experimentHeadIcon': { + fontSize: '1rem', + }, + '& .experimentDate': { + fontStyle: 'italic', + fontWeight: 300, + fontSize: '1rem', + color: experimentGrey, + whiteSpace: "nowrap" + }, + '& .experimentIcon': { + color: experimentGrey, + minWidth: 'auto', + '& .MuiSvgIcon-root': { + fontSize: '1.2rem', + }, + }, + '& .MuiChip-label': { + color: experimentGrey, + fontSize: ' 0.77rem', + fontWeight: 600, + }, + '& .MuiChip-root': { + background: experimentInputColor, + height: theme.spacing(3.2), + }, + '& .MuiChip-deleteIcon': { + marginRight: theme.spacing(0.4), + }, + '& .MuiTableCell-root': { + padding: theme.spacing(1, 2), + '&:nth-child(1)': { + width: '18.75rem', + '& button': { + maxWidth: '50vw', + justifyContent: 'inherit', + }, + '& h6': { + textOverflow: 'ellipsis', + whiteSpace: 'nowrap', + overflow: 'hidden', + }, + }, + '&:nth-child(2)': { + width: '9.375rem', + }, + }, + '& .MuiChip-icon': { + color: experimentGrey, + }, + '& .MuiDivider-vertical': { + height: theme.spacing(4), + background: 'rgba(255, 255, 255, 0.3)', + }, + '& .MuiTableCell-alignRight': { + width: theme.spacing(6), + paddingLeft: 0, + }, + '& .MuiTableCell-alignCenter': { + width: theme.spacing(6), + }, + }, + '& .MuiChipLoader': { + border: '3px solid rgba(196, 196, 196, 0.3)', + borderRadius: '50%', + borderTop: `3px solid ${experimentGrey}`, + width: theme.spacing(2.4), + height: theme.spacing(2.4), + animation: 'spin 2s linear infinite', + }, + }, + }, +}); + +const Experiments = (props) => { + const { + experiments, + classes, + setEditState, + setExperimentName, + cloneExperiment, + removeExperiment, + setView, + } = props; + + + + const [dialogOpen, setDialogOpen] = useState(false); + const [deleteDialogOpen, setDeleteDialogOpen] = useState(false); + const [cloneDialogOpen, setCloneDialogOpen] = useState(false); + const [actionExperimentName, setActionExperimentName] = useState(null); + + const deleteExperiment = (actionConfirmed) => { + if (actionConfirmed) { + removeExperiment(actionExperimentName); + + setDeleteDialogOpen(false); + + + } else { + setDeleteDialogOpen(false); + } + setActionExperimentName(null); + }; + + const viewExperiment = (name) => { + setEditState(false); + setExperimentName(name); + setView(EXPERIMENT_VIEWS.viewExperiment); + }; + + const createExperimentScreen = (actionConfirmed) => { + setDialogOpen(false); + setEditState(false); + setExperimentName(null); + setView(!actionConfirmed ? EXPERIMENT_VIEWS.list : EXPERIMENT_VIEWS.edit); + }; + + const openEditExperiment = (name) => { + setExperimentName(name); + setView(EXPERIMENT_VIEWS.edit); + setEditState(true); + }; + + const openCloneDialog = (name) => { + setActionExperimentName(name); + setCloneDialogOpen(true); + }; + + const openDeleteDialog = (name) => { + setActionExperimentName(name); + setDeleteDialogOpen(true); + }; + + const onCloneExperimentAction = (actionConfirmed) => { + if (actionConfirmed) { + cloneExperiment(actionExperimentName); + } + setCloneDialogOpen(false); + setActionExperimentName(null); + }; + + return ( + <> + +
+ + + + + {experiments.sort((e1, e2) => new Date(e2.timestamp) - new Date(e1.timestamp)).map((experiment) => ( + + + + + + + {Utils.formatDate(experiment?.timestamp)} + + + + {( + [ + EXPERIMENT_STATE.PENDING, + EXPERIMENT_STATE.SIMULATING, + EXPERIMENT_STATE.INSTANTIATING, + ].includes(experiment?.state)) + ? ( + } + label={experiment?.state} + // deleteIcon={} + // onDelete={() => { + // }} + /> + ) + : ( + + )} + + + + + + + + + + + + ))} + +
+
+
+
+ + + + + +
+ + + + + ); +}; + +export default withStyles(useStyles)(Experiments); diff --git a/webapp/components/experiments/ParameterMenu.js b/webapp/components/experiments/ParameterMenu.js new file mode 100644 index 00000000..533bb7e4 --- /dev/null +++ b/webapp/components/experiments/ParameterMenu.js @@ -0,0 +1,46 @@ +import React, { useState } from 'react'; +import IconButton from '@material-ui/core/IconButton'; +import Menu from '@material-ui/core/Menu'; +import MoreVertIcon from '@material-ui/icons/MoreVert'; +import MenuItem from '@material-ui/core/MenuItem'; + +const ParameterMenu = (props) => { + const { + parameter, index, removeFromGroup, addToGroup, removeParameter, + } = props; + const [anchorEl, setAnchorEl] = useState(null); + + const handleClick = (event) => { + setAnchorEl(event.currentTarget); + }; + + const handleClose = () => { + setAnchorEl(null); + }; + + return ( + <> + + + + + { parameter.inGroup + ? removeFromGroup(index)}>Remove from group + : addToGroup(index)}>Add to Group} + removeParameter(index, parameter)}>Delete + + + ); +}; + +export default ParameterMenu; diff --git a/webapp/components/experiments/processExperimentData.js b/webapp/components/experiments/processExperimentData.js new file mode 100644 index 00000000..ae101942 --- /dev/null +++ b/webapp/components/experiments/processExperimentData.js @@ -0,0 +1,56 @@ +import Utils from '../../Utils'; +import { getPythonTypeString } from './utils'; + +const REAL_TYPE = { + INT: 'int', + FLOAT: 'float', + BOOL: 'bool', + STR: 'str', + FUNC: 'func', + DICT: 'dict', + DICT_DICT: 'dict(dict)', +}; +const SUPPORTED_TYPES = [ + REAL_TYPE.INT, + REAL_TYPE.FLOAT, + REAL_TYPE.STR, + REAL_TYPE.BOOL, + REAL_TYPE.FUNC +]; + + + + + + +/** + * + * @param {*} params Netpyne parameters + * @returns map of flatten parameter name to the field spec from Netpyne metadata or inferred from the value + */ +export function getFlattenedParams(params) { + + const flattened = Utils.flatten(params); + function getFieldSpec(fieldKey) { + const metadataField = Utils.getMetadataField(fieldKey); + if(metadataField) { + return metadataField; + } + return { + type: getPythonTypeString(flattened[fieldKey]), + label: fieldKey.split(".").pop() + } + } + + const res = {}; + + for(const key in flattened) { + const field = getFieldSpec(key); + if(field && SUPPORTED_TYPES.includes(field.type)) { + res[key] = field + } + } + + return res; +} + diff --git a/webapp/components/experiments/utils.js b/webapp/components/experiments/utils.js new file mode 100644 index 00000000..b2e945d6 --- /dev/null +++ b/webapp/components/experiments/utils.js @@ -0,0 +1,41 @@ +import { REAL_TYPE } from '../../constants'; + +export function descendingComparator (a, b, orderBy) { + if (b[orderBy] < a[orderBy]) { + return -1; + } + if (b[orderBy] > a[orderBy]) { + return 1; + } + return 0; +} + +export function getComparator (order, orderBy) { + return order === 'desc' + ? (a, b) => descendingComparator(a, b, orderBy) + : (a, b) => -descendingComparator(a, b, orderBy); +} + +export function stableSort (array, comparator) { + const stabilizedThis = array.map((el, index) => [el, index]); + stabilizedThis.sort((a, b) => { + const order = comparator(a[0], b[0]); + if (order !== 0) return order; + return a[1] - b[1]; + }); + return stabilizedThis.map((el) => el[0]); +} + + +export function getPythonTypeString(obj) { + if(typeof obj == "number") { + return REAL_TYPE.FLOAT + } + if(typeof obj == "string") { + return REAL_TYPE.STR + } + if(typeof obj == "boolean") { + return REAL_TYPE.BOOL + } + return undefined; +} \ No newline at end of file diff --git a/webapp/components/general/AdapterComponent.js b/webapp/components/general/AdapterComponent.js index cdd8a5e2..b35336ed 100644 --- a/webapp/components/general/AdapterComponent.js +++ b/webapp/components/general/AdapterComponent.js @@ -27,6 +27,8 @@ export default class AdapterComponent extends Component { } componentDidUpdate (prevProps, prevState) { + if (this.props.commands !== prevProps.commands) + this.forceUpdate(); const newValue = this.props.convertFromPython(prevProps, prevState, this.props.value); if (newValue != undefined) { this.setState(newValue); @@ -49,7 +51,7 @@ export default class AdapterComponent extends Component { // Call to conversion function const newValue = this.props.convertToPython(this.state); - if (newValue != undefined && this.state.value != newValue) { + if (newValue != undefined && this.state.value != newValue && this.props.onChange) { this.props.onChange(null, null, newValue); } } diff --git a/webapp/components/general/Checkbox.js b/webapp/components/general/Checkbox.js index c7ba994b..4533b380 100644 --- a/webapp/components/general/Checkbox.js +++ b/webapp/components/general/Checkbox.js @@ -7,6 +7,10 @@ import FormControlLabel from '@material-ui/core/FormControlLabel'; import { bgLight } from '../../theme'; export default class Checkbox extends Component { + componentDidUpdate (prevProps, prevState) { + if (this.props.commands !== prevProps.commands) + this.forceUpdate(); + } render () { const { fullWidth, diff --git a/webapp/components/general/CommandRecorder.js b/webapp/components/general/CommandRecorder.js new file mode 100644 index 00000000..81bc975a --- /dev/null +++ b/webapp/components/general/CommandRecorder.js @@ -0,0 +1,103 @@ +import { KERNEL_HANDLING } from '../../constants'; +import { store } from '../../redux/actiondomainStore' +import { recordCommand, dropLastCommand, dropFromIndex } from '../../redux/actions/actiondomain'; +import { execPythonMessage, execPythonMessageWithoutRecording } from './GeppettoJupyterUtils'; + + +const registerKernelListeners = () => { + try { + if(IPython.notebook.kernel == null) { + console.warn("Kernel not initialized. Waiting to register kernel event listeners"); + setTimeout(registerKernelListeners, 500); + return; + } + } catch (error) { + console.warn("IPython not initialized. Waiting to register kernel event listeners"); + setTimeout(registerKernelListeners, 500); + return + } + + const notebook = IPython.notebook; + const handleKernelStatusChange = (event, data) => { + const kernelStatusEvent = new CustomEvent("kernelstatus", { + detail: { + "type": event.type, + ...data + }, + }); + window.dispatchEvent(kernelStatusEvent); + }; + + const handleExecutionRequest = (event, data) => { + if (data.content.netpyne_ui_triggered) { + return + } + const { kernel, content } = data; + record(kernel.id, content.code); + } + + // Kernel lifecycle requests + notebook.events.on('kernel_created.Kernel', handleKernelStatusChange); + notebook.events.on('kernel_reconnecting.Kernel', handleKernelStatusChange); + notebook.events.on('kernel_connected.Kernel', handleKernelStatusChange); + notebook.events.on('kernel_starting.Kernel', handleKernelStatusChange); + notebook.events.on('kernel_restarting.Kernel', handleKernelStatusChange); + notebook.events.on('kernel_autorestarting.Kernel', handleKernelStatusChange); + notebook.events.on('kernel_interrupting.Kernel', handleKernelStatusChange); + notebook.events.on('kernel_disconnected.Kernel', handleKernelStatusChange); + notebook.events.on('kernel_ready.Kernel', handleKernelStatusChange); + notebook.events.on('kernel_killed.Kernel', handleKernelStatusChange); + notebook.events.on('kernel_dead.Kernel', handleKernelStatusChange); + + // Execution requests + notebook.events.on('execution_request.Kernel', handleExecutionRequest); +} +registerKernelListeners(); + + +const record = (kernelID, command) => { + store.dispatch(recordCommand(kernelID, command)) +} + +const TIMEFRAME = 10 * 1000; // 10s +let lastReplayTime = 0 + +const getCommands = (kernelID) => { + return [ + "from jupyter_geppetto import jupyter_geppetto", + "from jupyter_geppetto import utils", + "from netpyne_ui.netpyne_geppetto import netpyne_geppetto", + "netpyne_geppetto.deleteModel({})", + `netpyne_geppetto.loadFromIndexFile("${KERNEL_HANDLING.tmpModelPath}")`, + ...store.getState()[kernelID] + ] +} + +const replayAll = (kernelID, fromRec = false) => { + const currentTimestamp = Date.now(); + const commands = getCommands(kernelID); + + if (!fromRec && currentTimestamp - lastReplayTime < TIMEFRAME) { + const restartLoop = new CustomEvent("kernelRestartLoop", { + detail: { + "kernel": kernelID, + "state": "looping" + } + }); + window.dispatchEvent(restartLoop); + store.dispatch(dropLastCommand(kernelID)) + replayAll(kernelID, true) + return + } + + const lastCommand = commands.pop() // we drop the last command which is probably the faulty one + const script = commands.join('\n') + console.log("Playing", script) + console.log("Skipping last command", lastCommand) + lastReplayTime = currentTimestamp + execPythonMessageWithoutRecording(script).then(() => { + store.dispatch(dropLastCommand(kernelID)) + }) +} + +export { record, replayAll } \ No newline at end of file diff --git a/webapp/components/general/ConfirmationDialog.js b/webapp/components/general/ConfirmationDialog.js new file mode 100644 index 00000000..331f9442 --- /dev/null +++ b/webapp/components/general/ConfirmationDialog.js @@ -0,0 +1,75 @@ +import React from 'react'; +import Dialog from '@material-ui/core/Dialog/Dialog'; +import Button from '@material-ui/core/Button'; +import DialogActions from '@material-ui/core/DialogActions'; +import DialogContent from '@material-ui/core/DialogContent'; +import DialogTitle from '@material-ui/core/DialogTitle'; +import { withStyles } from '@material-ui/core/styles'; +import { PYTHON_CALL, LOAD_TUTORIAL } from '../../redux/actions/general'; + +const styles = () => ({ + cancel: { marginRight: 10 }, +}); + +class ConfirmationDialog extends React.Component { + constructor (props) { + super(props); + this.state = { hide: !this.props.open }; + } + + handleConfirmation = () => { + if (this.props.confirmationDialogOnConfirm) { + if (this.props.confirmationDialogOnConfirm.type === PYTHON_CALL) { + this.props.pythonCall(this.props.confirmationDialogOnConfirm.cmd, this.props.confirmationDialogOnConfirm.args); + } else if (this.props.confirmationDialogOnConfirm.type === LOAD_TUTORIAL) { + if (this.props.confirmationDialogOnConfirm.payload !== undefined) { + this.props.dispatchAction(this.props.confirmationDialogOnConfirm.action(this.props.confirmationDialogOnConfirm.payload)); + } else { + this.props.dispatchAction(this.props.confirmationDialogOnConfirm.action); + } + } + } + } + + render () { + const { + confirmationDialogOpen, + confirmationDialogTitle, + confirmationDialogMessage, + closeConfirmationDialog, + } = this.props; + + return ( + closeConfirmationDialog()} + > + {confirmationDialogTitle} + + {confirmationDialogMessage} + + + {this.props.confirmationDialogOnConfirm && } + + + + ); + } +} + +export default withStyles(styles)(ConfirmationDialog); diff --git a/webapp/components/general/ControlPanelTreeItem.js b/webapp/components/general/ControlPanelTreeItem.js new file mode 100644 index 00000000..0f9e6ba6 --- /dev/null +++ b/webapp/components/general/ControlPanelTreeItem.js @@ -0,0 +1,356 @@ +import * as React from 'react'; +import { makeStyles } from '@material-ui/core/styles'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; +import Box from '@material-ui/core/Box'; +import IconButton from '@material-ui/core/IconButton'; +import TreeItem from '@material-ui/lab/TreeItem'; +import Visibility from '@material-ui/icons/Visibility'; +import VisibilityOff from '@material-ui/icons/VisibilityOff'; +import { ChromePicker } from 'react-color'; +import { useDispatch, useSelector } from 'react-redux'; +import { + experimentLabelColor, + bgDarker, + bgLight, + radius, +} from '../../theme'; +import { + RandomColorLensIcon, + SquareIcon, +} from './NetPyNEIcons'; +import { changeInstanceColor } from '../../redux/actions/general'; + +const useStyles = makeStyles((theme) => ({ + treeItem: { + '& .MuiTreeItem-iconContainer': { + marginRight: '5px', + }, + '& .MuiTreeItem-label': { + paddingTop: '2px', + paddingBottom: '2px', + paddingRight: '8px', + borderRadius: radius, + '&:hover': { + backgroundColor: '#333333', + }, + }, + }, + leafTreeItem: { + '& .MuiTreeItem-iconContainer': { + width: 0, + }, + }, + controls: { + '& .MuiIconButton-root': { + padding: '0 !important', + marginLeft: '0.5rem', + color: experimentLabelColor, + '&:hover': { + color: 'white', + }, + }, + }, + colorPickerBox: { + position: 'absolute', + top: '1.6rem', + right: '0', + height: '3rem', + }, + triangleIcon: { + marginBottom: '-7px', + color: bgDarker, + }, + colorPicker: { + position: 'absolute', + zIndex: 1000, + right: '0', + backgroundColor: `${bgDarker} !important`, + padding: '0.2rem', + '& label': { + color: '#ffffff !important', + fontFamily: 'Roboto, arial', + fontSize: '11px', + fontWeight: 400, + }, + '& input': { + backgroundColor: `${bgLight} !important`, + color: '#ffffff !important', + boxShadow: 'none !important', + fontFamily: 'Roboto, arial', + fontSize: '11px', + fontWeight: 400, + }, + '& svg': { + fill: '#ffffff !important', + }, + '& svg:hover': { + background: 'transparent !important', + }, + '& .hue-horizontal': { + borderRadius: '10px', + }, + '& :nth-child(2)': { + '& :nth-child(1)': { + '& :nth-child(2)': { + '& :nth-child(2)': { + '& :nth-child(1)': { + '& :nth-child(2)': { + borderRadius: '10px', + }, + }, + }, + }, + }, + }, + }, + activeColorPicker: { + '& path': { + fill: '#ffffff', + }, + }, +})); + +const ControlPanelTreeItem = (props) => { + const classes = useStyles(); + const dispatch = useDispatch(); + const [showColorPicker, setShowColorPicker] = React.useState(false); + const [isHoveredOver, setIsHoveredOver] = React.useState(false); + const [visibility, setVisibility] = React.useState(true); + const instances = useSelector((state) => state.general.instances); + const defaultColor = { + g: 0.50, + b: 0.60, + r: 1, + a: 1, + hex: "#FF7F99" + }; + + const getParent = (nodeId) => { + const insts = instances.filter((instance) => + nodeId.replace(instance.instancePath, '') !== nodeId && instance.instancePath.length < nodeId.length + ); + if (insts.length === 0) { + return null; + } + return insts.sort((a, b) => b.instancePath.length - a.instancePath.length)[0] + } + + const getColor = (nodeId) => { + const insts = instances.filter((instance) => instance.instancePath === nodeId); + const parent = getParent(nodeId); + // If there is no recorded parent, and there is no instances + if (!parent && insts.length === 0) { + return defaultColor; + } + // If there is a parent, but no instances, we take the color of the parent + if (insts.length === 0) { + return parent.color + } + const inst = insts[0] + // If the instance doesn't have children and have a color + if (props.children && props.children.length === 0 && insts.length > 0 && "color" in inst) { + return inst.color + } + // we check if all children have the same color + const children = instances.filter((instance) => instance.instancePath.startsWith(nodeId) && instance.instancePath !== nodeId); + // if we cannot find children (no color set for children) + if (children.length === 0) { + // if there is a color, we display it + if (inst.color) { + return inst.color + } + // if there is none (color not set) we take the default one + return defaultColor; + } + const color = children[0].color; + if (children.length > 1 && children.every(x => x.color && x.color.hex === color.hex)) { + return color + } + return { hex: "#989898" } + } + + const randomColor = () => { + const [r, g, b] = [Math.random() * 255, Math.random() * 255, Math.random() * 255]; + return { + r: parseFloat(r.toFixed(2)), + g: parseFloat(g.toFixed(2)), + b: parseFloat(b.toFixed(2)), + a: 1, + hex: "#" + (r >> 0).toString(16) + (g >> 0).toString(16) + (b >> 0).toString(16) + } + } + + const translateColor = (_color) => { + return { + r: _color.r / 255, + g: _color.g / 255, + b: _color.b / 255, + a: _color.a, + hex: _color.hex + } + } + + const handleLeafColorChange = (event, nodeId, colorGenerator) => { + const updateInstances = instances.filter((instance) => !instance.instancePath.startsWith(nodeId)); + updateInstances.push({ + instancePath: nodeId, + color: translateColor(colorGenerator()) + }); + dispatch(changeInstanceColor(updateInstances)); + } + + const handleContainerColorChange = (event, nodeId, colorGenerator) => { + event.stopPropagation(); + event.preventDefault(); + + const instance = window.Instances.getInstance(nodeId); + const childrenPaths = [...instance.getChildren()] + .map((instance) => instance.getInstancePath()); + const children = childrenPaths.filter((path) => path.startsWith(nodeId)); + const updateInstances = instances.filter((instance) => { + let condition = true; + children.forEach((child) => { + if (instance.instancePath.startsWith(child)) { + condition = false; + } + }); + return condition; + }); + children.forEach((child) => { + updateInstances.push({ + instancePath: child, + color: translateColor(colorGenerator()) + }); + }); + dispatch(changeInstanceColor(updateInstances)); + } + + const handleColorChange = (event, nodeId, colorGenerator) => { + if (props.children.length === 0) { + handleLeafColorChange(event, nodeId, colorGenerator); + return + } + handleContainerColorChange(event, nodeId, colorGenerator); + } + + const changeVisibility = (event, nodeId) => { + event.stopPropagation(); + event.preventDefault(); + const copiedInstances = instances.slice(); + let oldIndex = null; + let oldInstance = copiedInstances.find((pInstance, index) => { + if (pInstance.instancePath === nodeId) { + oldIndex = index; + return true; + } + return false; + }); + if (!oldInstance) { + oldInstance = { + instancePath: nodeId, + visibility: false, + }; + } else { + copiedInstances.splice(oldIndex, 1); + oldInstance.visibility = (oldInstance?.visibility !== undefined) ? !oldInstance.visibility : false; + } + + const newInstances = instances.map((instance) => { + if (!(instance.instancePath.startsWith(nodeId))) { + return instance; + } + const newInstance = instance; + newInstance.visibility = oldInstance.visibility; + return newInstance; + }); + + newInstances.push(oldInstance); + + dispatch(changeInstanceColor(newInstances)); + setVisibility(oldInstance.visibility); + }; + + const { + label, + type, + nodeId, + onNodeSelect, + onVisibilityClick, + children, + disableRandom, + ...other + } = props; + + return ( + setIsHoveredOver(true)} + onMouseLeave={() => { setIsHoveredOver(false); setShowColorPicker(false) }} + display="flex" + flexDirection="row" + justifyContent="space-between" + > + + + { + onNodeSelect(nodeId); + event.stopPropagation(); + event.preventDefault(); + }} + > + {label} + + + {type} + + {isHoveredOver + ? ( + <> + changeVisibility(event, nodeId)}> + { visibility ? : } + + handleColorChange(event, nodeId, randomColor)}> + + + + ) + : null} + { + event.stopPropagation(); + event.preventDefault(); + setShowColorPicker(true) + }}> + + + + {showColorPicker && isHoveredOver + ? ( + setShowColorPicker(false)} + > + { + handleColorChange(event, nodeId, () => {return {...color.rgb, hex: color.hex}}); + }} + /> + + ) : null + } + + + )} + > + {children} + + ); +}; + +export default ControlPanelTreeItem; diff --git a/webapp/components/general/DeleteDialogBox.js b/webapp/components/general/DeleteDialogBox.js deleted file mode 100644 index 23ff6fac..00000000 --- a/webapp/components/general/DeleteDialogBox.js +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Tabbed Drawer resizable component - * It uses the components DrawerButton and Rnd to create a resizable Tabbed Drawer. - * - * @author Dario Del Piano - * @author Adrian Quintana - */ - -import React from 'react'; -import Dialog from '@material-ui/core/Dialog'; -import Button from '@material-ui/core/Button'; - -import DialogActions from '@material-ui/core/DialogActions'; -import DialogContent from '@material-ui/core/DialogContent'; -import DialogContentText from '@material-ui/core/DialogContentText'; -import DialogTitle from '@material-ui/core/DialogTitle'; - -export default class DeleteDialogBox extends React.Component { - constructor (props) { - super(props); - this.state = { - open: props.open, - response: false, - }; - } - - componentDidUpdate (prevProps, prevState) { - if (prevProps.open != this.props.open) { - this.setState({ open: this.props.open }); - } - } - - render () { - return ( - - {`Delete ${this.props.textForDialog}`} - - - {`Do you want to remove ${this.props.textForDialog} ?`} - - - - - - - - ); - } -} diff --git a/webapp/components/general/Dialog.js b/webapp/components/general/Dialog.js index 6f2c413b..c133d28a 100644 --- a/webapp/components/general/Dialog.js +++ b/webapp/components/general/Dialog.js @@ -1,18 +1,11 @@ import React from 'react'; -import Button from '@material-ui/core/Button'; import MuiDialog from '@material-ui/core/Dialog'; -import DialogActions from '@material-ui/core/DialogActions'; -import DialogContent from '@material-ui/core/DialogContent'; -import Typography from '@material-ui/core/Typography'; -import DialogTitle from '@material-ui/core/DialogTitle'; -import Paper from '@material-ui/core/Paper'; -import Box from '@material-ui/core/Box'; -import Link from '@material-ui/core/Link'; -import Icon from '@material-ui/core/Icon'; +import { Button,DialogActions, DialogContent, DialogTitle, DialogContentText } from '@material-ui/core'; +import { Typography, Paper, Box, Link, Icon } from '@material-ui/core'; import { withStyles } from '@material-ui/core/styles'; import { secondaryColor, bgLight } from '../../theme'; -import logo_netpyne from '../../static/netpyne-logo_white.png'; -import logo_metacell from '../../static/metacell_new.png'; +import logoNetpyne from '../../static/netpyne-logo_white.png'; +import logoMetaCell from '../../static/metacell_new.png'; const styles = (theme) => ({ paper: { @@ -23,18 +16,24 @@ const styles = (theme) => ({ const AboutContent = withStyles(styles)(({ classes }) => ( - + - - NetPyNE-UI v0.7.0 - + + NetPyNE-UI v1.1.0 + + + NetPyNE v1.0.6 + + + NEURON v8.2.2 + NetPyNE is a Python package to facilitate the development, simulation, parallelization, and analysis of biological neuronal networks using the - NEURON simulator. Checkout our + NEURON simulator. Check out our {' '} eLife paper. @@ -58,7 +57,10 @@ const AboutContent = withStyles(styles)(({ classes }) => ( - NetPyNE-UI is being developed in collaboration with: + NetPyNE-UI is being developed by the State University of New York Downstate ( + Dura-Bernal Lab + ) + in collaboration with: ( width: 150, padding: '10px', }} - src={logo_metacell} + src={logoMetaCell} /> @@ -125,18 +127,32 @@ const ContributeContent = withStyles(styles)(({ classes }) => ( )); + + +const titleContentMapping = { + Contribute: , + About: +} + export default function Dialog ({ open, title, message, handleClose, }) { + const selectMessageContent = () => { + if (title in titleContentMapping) { + return titleContentMapping[title] + } + return {message} + } return (
{title} - {title === 'Contribute' ? : } + {/* {title === 'Contribute' ? : } */} + {selectMessageContent()} + + + + ); + } +} diff --git a/webapp/components/general/ExpansionPanel.js b/webapp/components/general/ExpansionPanel.js index f8cf2708..76b6807d 100644 --- a/webapp/components/general/ExpansionPanel.js +++ b/webapp/components/general/ExpansionPanel.js @@ -10,7 +10,10 @@ import Tooltip from './Tooltip'; const styles = ({ spacing }) => ({ button: { marginRight: 0 } }); class NetPyNEAccordion extends Component { - state = { expanded: false }; + constructor (props) { + super(props); + this.state = { expanded: false }; + } render () { const { @@ -24,7 +27,7 @@ class NetPyNEAccordion extends Component { this.setState({ expanded: !this.state.expanded }), + onClick: () => this.setState((prevState) => ({ expanded: !prevState.expanded })), className: classes.button, }} expandIcon={( diff --git a/webapp/components/general/ExperimentControlPanel.js b/webapp/components/general/ExperimentControlPanel.js new file mode 100644 index 00000000..8f0aee4e --- /dev/null +++ b/webapp/components/general/ExperimentControlPanel.js @@ -0,0 +1,191 @@ +/* eslint-disable no-nested-ternary */ +import * as React from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { makeStyles } from '@material-ui/core/styles'; +import Box from '@material-ui/core/Box'; +import Typography from '@material-ui/core/Typography'; +import TextField from '@material-ui/core/TextField'; +import TreeView from '@material-ui/lab/TreeView'; +import ControlPanelTreeItem from './ControlPanelTreeItem'; +import { experimentLabelColor } from '../../theme'; +import { MODEL_STATE } from '../../constants'; +import { selectInstances } from '../../redux/actions/general'; +import { TreeItemArrowRightIcon, TreeItemArrowDownIcon } from './NetPyNEIcons'; + +const useStyles = makeStyles(() => ({ + root: { + '& ul': { + position: 'relative', + '&::before': { + content: '""', + height: 'calc(100% - 1.1rem)', + width: '0.0625rem', + position: 'absolute', + left: '-0.65rem', + borderRadius: '3.125rem', + top: '0rem', + backgroundImage: 'url("data:image/svg+xml,%3Csvg width=\'1\' height=\'8\' viewBox=\'0 0 1 8\' fill=\'none\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath d=\'M0 0H1V8H0V0Z\' fill=\'%23989898\'/%3E%3C/svg%3E")', + backgroundRepeat: 'repeat', + }, + '& .MuiTreeItem-root': { + position: 'relative', + '&::before': { + content: '""', + height: '0.875rem', + width: '1.4375rem', + backgroundImage: 'url("data:image/svg+xml,%3Csvg width=\'12\' height=\'6\' viewBox=\'0 0 12 6\' fill=\'none\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath d=\'M6 6C2.68629 6 0 3.31371 0 0H1C1 2.80391 3.19609 5 6 5V6Z\' fill=\'%23989898\'/%3E%3Cpath d=\'M6 5H11.5C11.7761 5 12 5.22386 12 5.5C12 5.77614 11.7761 6 11.5 6H6V5Z\' fill=\'%23989898\'/%3E%3C/svg%3E")', + position: 'absolute', + top: '0.5rem', + backgroundRepeat: 'no-repeat', + left: '-0.65rem', + }, + '&::after': { + content: '""', + height: '0.0625rem', + borderRadius: '3.125rem', + width: '0.5rem', + backgroundColor: '#ffffff', + position: 'absolute', + left: '0', + top: '1.0625rem', + display: 'none', + }, + '&:hover': { + background: 'transparent', + }, + '&:focus > .MuiTreeItem-content': { + backgroundColor: 'transparent', + }, + }, + }, + }, + header: { + '& .MuiTypography-root': { + color: experimentLabelColor, + fontWeight: 'bold', + }, + }, + svgContainer: { + fontSize: '12px', + width: '10px', + height: '10px', + }, +})); + +const ExperimentControlPanel = (props) => { + const classes = useStyles(); + const dispatch = useDispatch(); + const instances = useSelector((state) => state.general.instances); + const [filter, setFilter] = React.useState(''); + const onNodeSelect = (nodeId) => { + dispatch(selectInstances(instances, [nodeId])); + }; + const instancesMap = new Map(); + + const onVisibilityClick = (event, nodeId) => { + console.log(`Visibility of node with id of ${nodeId} clicked.`); + }; + + const traverseInstances = (instance) => { + if (instance.getPath().includes(filter)) { + instancesMap.set( + instance.getPath(), + ( + + ), + ); + } + + if (instance.getChildren() && instance.getChildren().length > 0) { + const children = instance.getChildren(); + for (let i = 0; i < children.length; i += 1) { + traverseInstances(children[i]); + } + } + }; + + const getFlatFilteredList = (instances) => { + instancesMap.clear(); + instances.forEach((instance) => traverseInstances(instance)); + + const flatList = []; + instancesMap.forEach((value, key) => { + if (value.key.includes(filter)) { + flatList.push(value); + } + }); + return flatList; + }; + + const getTreeItemsFromData = (treeItems) => treeItems.map((treeItemData) => { + let children = []; + if (treeItemData.getChildren() && treeItemData.getChildren().length > 0) { + children = getTreeItemsFromData(treeItemData.getChildren()); + } + + return ( + + {children} + + ); + }); + + return ( + <> + { + props.modelState === MODEL_STATE.INSTANTIATED || props.modelState === MODEL_STATE.SIMULATED + ? ( + window.Instances + ? ( + + setFilter(e.target.value)} /> + + Name + Type(s) + Controls + + } + defaultExpandIcon={} + > + {filter === '' + ? getTreeItemsFromData([window.Instances.getInstance('network')]) + : getFlatFilteredList([window.Instances.getInstance('network')])} + + + ) + : ( + +

Error: Should not happen. ModelState === INSTANTIATED but global Instances object is not defined.

+
+ ) + ) + : ( + +

Model is not instantiated. Please instantiate a model to access the control panel.

+
+ ) + } + + ); +}; + +export default ExperimentControlPanel; diff --git a/webapp/components/general/FileBrowser.js b/webapp/components/general/FileBrowser.js index cc45be66..c223d2b7 100644 --- a/webapp/components/general/FileBrowser.js +++ b/webapp/components/general/FileBrowser.js @@ -1,5 +1,4 @@ import React from 'react'; -import Tree from '@geppettoengine/geppetto-client/js/components/interface/tree/Tree'; import Button from '@material-ui/core/Button'; import { changeNodeAtPath, walk } from 'react-sortable-tree'; import Dialog from '@material-ui/core/Dialog'; @@ -10,6 +9,7 @@ import DialogContent from '@material-ui/core/DialogContent'; import { Tooltip } from 'netpyne/components'; import IconButton from '@material-ui/core/IconButton'; import Icon from '@material-ui/core/Icon'; +import Tree from './tree/Tree'; import Utils from '../../Utils'; import { bgLight, fontColor } from '../../theme'; @@ -20,17 +20,24 @@ export default class FileBrowser extends React.Component { this.handleClickVisualize = this.handleClickVisualize.bind(this); this.state = {}; + this.tree; + if (this.props.open) { + this.getDirList([], undefined, this.props.startDir); + } } - getDirList (treeData, rowInfo) { + getDirList (treeData, rowInfo, startDir = '') { if (rowInfo != undefined) { var { path } = rowInfo.node; } else { var path = ''; } + if (!startDir) { + startDir = ''; + } Utils - .evalPythonMessage('netpyne_geppetto.getDirList', [path, this.props.exploreOnlyDirs, this.props.filterFiles]) + .evalPythonMessage('netpyne_geppetto.getDirList', [path, this.props.exploreOnlyDirs, this.props.filterFiles, startDir]) .then((dirList) => { if (treeData != [] && treeData.length > 0) { rowInfo.node.children = dirList; @@ -50,13 +57,13 @@ export default class FileBrowser extends React.Component { } else { this.setState({ selection: rowInfo.node }); } - this.refs.tree.updateTreeData(newTreeData); + this.tree.updateTreeData(newTreeData); }); } handleClickVisualize (event, rowInfo) { if (rowInfo.node.load == false) { - this.getDirList(this.refs.tree.state.treeData, rowInfo); + this.getDirList(this.tree.state.treeData, rowInfo, this.props.startDir); } else if (this.props.exploreOnlyDirs || (rowInfo.node.children == undefined && rowInfo.node.load == undefined)) { this.setState({ selection: rowInfo.node }); } @@ -64,11 +71,11 @@ export default class FileBrowser extends React.Component { getSelectedFiles () { const nodes = {}; - if (!this.refs.tree) { + if (!this.tree) { return nodes; } walk({ - treeData: this.refs.tree.state.treeData, + treeData: this.tree.state.treeData, getNodeKey: ({ treeIndex }) => treeIndex, ignoreCollapsed: true, callback: (rowInfoIter) => { @@ -83,12 +90,12 @@ export default class FileBrowser extends React.Component { componentDidUpdate (prevProps, prevState) { if (prevProps.open == false && this.props.open) { - this.getDirList([]); + this.getDirList([], undefined, prevProps.startDir); } } handleMoveUp (reset = false) { - let path = this.refs.tree.state.treeData[0].path.split('/').slice(0, -2).join('/') || '/'; + let path = this.tree.state.treeData[0].path.split('/').slice(0, -2).join('/') || '/'; if (reset) { path = window.currentFolder; @@ -181,7 +188,7 @@ export default class FileBrowser extends React.Component { rowHeight={30} toggleMode={!!this.props.toggleMode} activateParentsNodeOnClick={this.props.exploreOnlyDirs} - ref="tree" + ref={(refElement) => this.tree = refElement} /> diff --git a/webapp/components/general/Filter.js b/webapp/components/general/Filter.js index 8f0b1924..f407a421 100644 --- a/webapp/components/general/Filter.js +++ b/webapp/components/general/Filter.js @@ -18,7 +18,10 @@ const styles = ({ spacing, shape }) => ({ listbox: { color: 'white', maxHeight: '20vh' }, }); class Filter extends Component { - state = { open: false } + constructor (props) { + super(props); + this.state = { open: false }; + } render () { const { @@ -31,7 +34,6 @@ class Filter extends Component { onClose={() => this.setState({ open: false })} onOpen={() => this.setState({ open: true })} className={classes.filter} - clearOnEscape autoComplete openOnFocus diff --git a/webapp/components/general/GeppettoJupyterUtils.js b/webapp/components/general/GeppettoJupyterUtils.js index 114a9f2c..276df8d0 100644 --- a/webapp/components/general/GeppettoJupyterUtils.js +++ b/webapp/components/general/GeppettoJupyterUtils.js @@ -1,16 +1,22 @@ +import { record as recordCommand } from './CommandRecorder'; + + const handle_output = function (data) { // data is the object passed to the callback from the kernel execution switch (data.msg_type) { case 'error': - GEPPETTO.CommandController.log('ERROR while executing a Python command:'); - GEPPETTO.CommandController.log(data.content.evalue.trim()); + console.log('ERROR while executing a Python command:'); + console.log(data.content.evalue.trim()); console.error('ERROR while executing a Python command:'); console.error(data.content.traceback); + if (data.content.evalue === "name 'utils' is not defined") { + execPythonMessage('from jupyter_geppetto import synchronization, utils, synchronization as jupyter_geppetto'); + execPythonMessage('from netpyne_ui.netpyne_geppetto import netpyne_geppetto'); + } + // dispatch(GeppettoActions.geppettoError); GEPPETTO.trigger(GEPPETTO.Events.Error_while_exec_python_command, data.content); - GEPPETTO.trigger(GEPPETTO.Events.Hide_spinner); break; case 'execute_result': - GEPPETTO.CommandController.log(data.content.data['text/plain'].trim(), true); try { var response = JSON.parse(data.content.data['text/plain'].replace(/^'(.*)'$/, '$1')); } catch (error) { @@ -22,27 +28,48 @@ const handle_output = function (data) { // FIXME break; default: - GEPPETTO.CommandController.log(data.content.text.trim(), true); + console.log(data.content.text.trim(), true); } }; -const execPythonMessage = function (command, callback = handle_output) { - GEPPETTO.CommandController.log(`Executing Python command: ${command}`, true); +const execPythonMessage = function (command, callback = handle_output, record = true) { const { kernel } = IPython.notebook; - const messageID = kernel.execute(command, { iopub: { output: callback } }, { silent: false, stop_on_error: true, store_history: true }); + if (record) { + recordCommand(kernel.id, command) + } + const messageID = kernel.execute( + command, + { + iopub: { output: callback } + }, + { + silent: false, + stop_on_error: true, + store_history: true, + netpyne_ui_triggered: true + }); + return new Promise((resolve, reject) => GEPPETTO.on(GEPPETTO.Events.Receive_Python_Message, (data) => { - if (data.id == messageID) { - resolve(data.response); + if (data.data.id == messageID) { + resolve(data.data.response); } })); }; -const evalPythonMessage = function (command, parameters, parse = true) { +const execPythonMessageWithoutRecording = function (command, callback = handle_output) { + return execPythonMessage(command, callback, false) +} + +const addslashes = function (str) { + return (str + '').replace(/[\\"']/g, '\\$&').replace(/\u0000/g, '\\0'); +} + +const evalPythonMessage = function (command, parameters, parse = true, record = true) { let parametersString = ''; if (parameters) { if (parameters.length > 0) { - parametersString = `(${parameters.map((parameter) => `utils.convertToPython('${JSON.stringify(parameter)}')`).join(',')})`; + parametersString = `(${parameters.map((parameter) => `utils.convertToPython('${addslashes(JSON.stringify(parameter))}')`).join(',')})`; } else { parametersString = '()'; } @@ -52,7 +79,7 @@ const evalPythonMessage = function (command, parameters, parse = true) { if (parse) { finalCommand = `utils.convertToJS(${finalCommand})`; } - return execPythonMessage(finalCommand, handle_output); + return execPythonMessage(finalCommand, handle_output, record); }; -export { execPythonMessage, evalPythonMessage }; +export { execPythonMessage, evalPythonMessage, execPythonMessageWithoutRecording }; diff --git a/webapp/components/general/HTMLViewer.js b/webapp/components/general/HTMLViewer.js index c078e83f..ca1bf4d1 100644 --- a/webapp/components/general/HTMLViewer.js +++ b/webapp/components/general/HTMLViewer.js @@ -1,9 +1,10 @@ import React, { Component, createRef } from 'react'; -import HTMLViewer - from '@geppettoengine/geppetto-client/js/components/interface/htmlViewer/HTMLViewer'; +import HTMLViewer from '@metacell/geppetto-meta-ui/html-viewer/HTMLViewer'; import { withStyles } from '@material-ui/core/styles'; +import { CircularProgress } from '@material-ui/core'; +import { primaryColor } from '../../theme'; const style = ({ palette }) => ({ container: { @@ -24,20 +25,16 @@ class CustomHTMLViewer extends Component { componentDidMount () { window.addEventListener('resize', this.delayedResize.bind(this)); - this.resizeIfNeeded(); - } - - componentWillUnmount () { - clearTimeout(this.timer); - window.removeEventListener('resize', this.delayedResize); + this.resizeIfNeeded(true); } componentDidUpdate () { - this.resizeIfNeeded(); + this.resizeIfNeeded(true); } - wasParentResized (dimensions) { - return dimensions.width !== this.dimensions.width || dimensions.height !== this.dimensions.height; + componentWillUnmount () { + clearTimeout(this.timer); + window.removeEventListener('resize', this.delayedResize); } getParentSize () { @@ -49,7 +46,11 @@ class CustomHTMLViewer extends Component { getSvgComponent () { // svg element - return this.containerRef.current.children[0].children[0].children[0]; + return this.containerRef?.current?.children[0]?.children[0]?.children[0]; + } + + wasParentResized (dimensions) { + return dimensions.width !== this.dimensions.width || dimensions.height !== this.dimensions.height; } adjustSVGSize () { @@ -64,10 +65,10 @@ class CustomHTMLViewer extends Component { } } - resizeIfNeeded () { + resizeIfNeeded (force = false) { const dimensions = this.getParentSize(); - if (dimensions !== false && this.wasParentResized(dimensions)) { + if ((dimensions !== false && this.wasParentResized(dimensions)) || (force)) { this.dimensions = dimensions; this.adjustSVGSize(); } @@ -78,7 +79,20 @@ class CustomHTMLViewer extends Component { } render () { - const { classes } = this.props; + const { classes, content } = this.props; + if (content === undefined) { + return ( + + ); + } return (
diff --git a/webapp/components/general/JsonViewer.js b/webapp/components/general/JsonViewer.js new file mode 100644 index 00000000..cf5164bb --- /dev/null +++ b/webapp/components/general/JsonViewer.js @@ -0,0 +1,126 @@ +import React from 'react'; +import ReactJson from 'react-json-view'; +import Breadcrumbs from '@material-ui/core/Breadcrumbs'; +import Typography from '@material-ui/core/Typography'; +import { withStyles } from '@material-ui/core/styles'; +import Button from '@material-ui/core/Button'; +import Box from '@material-ui/core/Box'; +import NavigateNextIcon from '@material-ui/icons/NavigateNext'; +import { + fontColor, + experimentLabelColor, + bgDarker, + bgDarkest, + primaryColor, +} from '../../theme'; +import { EXPERIMENT_VIEWS } from '../../constants'; + +const useStyles = (theme) => ({ + root: { + width: 'auto !important', + flexDirection: 'column', + backgroundColor: bgDarker, + padding: theme.spacing(2), + borderRadius: '0.25rem', + '& .MuiBreadcrumbs-separator': { + marginLeft: theme.spacing(0), + }, + '& .react-json-view': { + padding: theme.spacing(2), + overflow: 'auto', + borderRadius: '0.25rem', + '& span': { + opacity: 1, + }, + }, + '& .MuiBreadcrumbs-ol': { + paddingBottom: theme.spacing(2), + '& .MuiBreadcrumbs-li': { + '& a': { + color: experimentLabelColor, + fontSize: '1rem', + }, + '& p': { + color: fontColor, + fontSize: '1rem', + }, + }, + }, + '& .pageHeading': { + padding: `${theme.spacing(0.75)}px ${theme.spacing(1)}px ${theme.spacing(2)}px`, + height: theme.spacing(7), + color: fontColor, + fontSize: '1rem', + }, + }, +}); + +const JsonViewer = (props) => { + const { + baseTitle, classes, title, json, setView, + } = props; + + const theme = { + scheme: 'netPyneJsonViewer', + base00: bgDarkest, + base01: bgDarkest, + base02: '#4D4D4D', + base03: fontColor, + base04: fontColor, + base05: fontColor, + base06: fontColor, + base07: fontColor, + base08: fontColor, + base09: primaryColor, + base0A: fontColor, + base0B: primaryColor, + base0C: fontColor, + base0D: fontColor, + base0E: fontColor, + base0F: primaryColor, + }; + + const goBackToBase = () => { + setView(EXPERIMENT_VIEWS.viewExperiment); + }; + + return ( +
+ { baseTitle ? ( + } + aria-label="breadcrumb" + > + + {title} + + ) : ( + + {title} + + )} + +
+ ); +}; + +export default withStyles(useStyles)(JsonViewer); diff --git a/webapp/components/general/List.js b/webapp/components/general/List.js index 48af67ed..fbb2374e 100644 --- a/webapp/components/general/List.js +++ b/webapp/components/general/List.js @@ -34,6 +34,48 @@ class ListComponent extends Component { return this.props.realType == 'dict' || this.props.realType == 'dict(dict)'; } + isChildValidListOfDict(value) { + // check if valid - square bracket + var validBracket = value[0] == '[' && value[value.length - 1] == ']'; + if (!validBracket) { + return false; + } + try { + value = value.replace(/'([^']+)':/g, '"$1":').replace(/'/g, '"'); + const valueArray = JSON.parse(value); + let valid = true; + valueArray.forEach((element) => { + if (!this.isChildValidDict(JSON.stringify(element))) { + valid = false; + } + }); + return valid; + } catch (e) { + // if not parsable then false + return false; + } + } + + isChildValidDict(value) { + // validity of curly braces + var validBraces = value.indexOf('{') == 0 && value.indexOf('}') == value.length - 1; + if (!validBraces) { + return false; + } + + var valid = true; + + try { + // check if valid json after + value = value.replace(/'([^']+)':/g, '"$1":').replace(/'/g, '"'); + const valueArray = JSON.parse(value); + } catch (e) { + return false; + } + + return valid; + } + isValid (value) { switch (this.props.realType) { case 'list(float)': @@ -41,11 +83,12 @@ class ListComponent extends Component { break; case 'list(list(float))': var valid = true; - value.split(',').forEach((element) => { - if (!element.match(/^-?\d*(\.\d+)?$/)) { - valid = false; - } - }); + value.split(',') + .forEach((element) => { + if (!element.match(/^-?\d*(\.\d+)?$/)) { + valid = false; + } + }); if (value.endsWith(',')) { valid = false; } @@ -63,41 +106,45 @@ class ListComponent extends Component { valid = false; } else if ( (value.match(/{/g) || []).length != 1 - || (value.match(/}/g) || []).length != 1 + || (value.match(/}/g) || []).length != 1 ) { valid = false; } else if ( value.indexOf('{') > value.indexOf('}') - || !value.endsWith('}') + || !value.endsWith('}') ) { valid = false; } else { const subDict = value.match(/\{(.*?)\}/)[1]; if ( (subDict.match(/:/g) || []).length - 1 - != (subDict.match(/,/g) || []).length + != (subDict.match(/,/g) || []).length ) { valid = false; } else { - subDict.split(',').forEach((element) => { - if ( - (element.match(/:/g) || []).length != 1 - || element.startsWith(':') - || element.endsWith(':') - ) { - valid = false; - } - }); + subDict.split(',') + .forEach((element) => { + if ( + (element.match(/:/g) || []).length != 1 + || element.startsWith(':') + || element.endsWith(':') + ) { + valid = false; + } + }); const reminder = value.replace(`{${subDict}}`, ''); if ( (reminder.match(/:/g) || []).length != 1 - || !reminder.endsWith(':') + || !reminder.endsWith(':') ) { valid = false; } } } break; + case 'list(dict)': + valid = this.isChildValidListOfDict(value) || this.isChildValidDict(value); + break default: var valid = true; break; @@ -106,28 +153,36 @@ class ListComponent extends Component { } getErrorMessage () { - switch (this.props.realType) { + let message; + const { realType } = this.props; + switch (realType) { case 'list(float)': - var message = 'Only float numbers are allowed.'; + message = 'Only float numbers are allowed.'; break; case 'list(list(float))': - var message = 'Only comma separated float numbers are allowed.'; + message = 'Only comma separated float numbers are allowed.'; break; case 'dict': - var message = 'Key:Value pairs must be separated by colon : '; + message = 'Key:Value pairs must be separated by colon : '; break; case 'dict(dict)': - var message = 'Incorrect format. Example -> v_soma : { sec: soma, loc: 0.5, var: v}'; + message = 'Incorrect format. Example -> v_soma : { sec: soma, loc: 0.5, var: v}'; + break; + case 'list(dict)': + message = "Incorrect format. Example -> {'cellLabel':'gs21', 'x': 2}, or [{...}]"; break; default: - var message = 'No a valid value'; + message = 'Not a valid value'; break; } return message; } handleNewItemChange (event) { - this.setState({ newItemValue: event.target.value, newItemErrorText: '' }); + this.setState({ + newItemValue: event.target.value, + newItemErrorText: '', + }); } addChild () { @@ -165,6 +220,20 @@ class ListComponent extends Component { children[key][entry[0]] = entry[1]; }); break; + case 'list(dict)': + var newValue = this.state.newItemValue + if (this.isChildValidListOfDict(newValue)) { + newValue = newValue.replace(/'([^']+)':/g, '"$1":').replace(/'/g, '"'); + const valueArray = JSON.parse(newValue); + valueArray.forEach((element) => { + children.push(element); + }); + } else if (this.isChildValidDict(newValue)) { + newValue = newValue.replace(/'([^']+)':/g, '"$1":').replace(/"/g, "'").replace(/'/g, '"'); + const parsedNewValue = JSON.parse(newValue); + children.push(parsedNewValue); + } + break; default: var newValue = this.state.newItemValue; children.push(newValue); @@ -181,6 +250,8 @@ class ListComponent extends Component { const { children } = this.state; if (this.props.realType == 'dict' || this.props.realType == 'dict(dict)') { delete children[childIndex]; + } else if (this.props.realType == 'list(dict)') { + children.splice(childIndex, 1); } else { children.splice(childIndex, 1); } @@ -190,7 +261,10 @@ class ListComponent extends Component { convertToPython (children) { // Update State - this.setState({ children, newItemValue: '' }); + this.setState({ + children, + newItemValue: '', + }); if (this.props.realType == 'dict' || this.props.realType == 'dict(dict)') { var newValue = children; @@ -203,6 +277,9 @@ class ListComponent extends Component { case 'list(list(float))': var childConverted = JSON.parse(child); break; + case 'list(dict)': + var childConverted = child; + break; default: var childConverted = child; break; @@ -228,6 +305,9 @@ class ListComponent extends Component { ) { return typeof value === 'string' ? JSON.parse(value) : value; } + if (this.props.realType == 'list(dict)') { + return typeof value === 'string' ? JSON.parse(value) : value; + } if (!Array.isArray(value)) { value = [value]; } @@ -247,32 +327,40 @@ class ListComponent extends Component { } render () { - const childrenWithExtraProp = Object.keys(this.state.children).map( - (key, index) => { - key = key.toString(); - if (this.props.realType == 'dict') { - var value = `${key} : ${JSON.stringify(this.state.children[key])}`; - } else if (this.props.realType == 'dict(dict)') { - var value = `${key - }: ${ - JSON.stringify(this.state.children[key]) + const childrenWithExtraProp = Object.keys(this.state.children) + .map( + (key, index) => { + key = key.toString(); + if (this.props.realType == 'dict') { + var value = `${key} : ${JSON.stringify(this.state.children[key])}`; + } else if (this.props.realType == 'dict(dict)') { + var value = `${key + }: ${ + JSON.stringify(this.state.children[key]) + .replace(/["']/g, '') + .replace(/[:]/g, ': ') + .replace(/[,]/g, ', ')}`; + } + else if (this.props.realType == 'list(dict)') { + var value = `${JSON.stringify(this.state.children[key]) .replace(/["']/g, '') .replace(/[:]/g, ': ') .replace(/[,]/g, ', ')}`; - } else { - var value = this.state.children[key]; - } - return ( - this.removeChild(key)} - color="primary" - /> - ); - }, - ); + } + else { + var value = this.state.children[key]; + } + return ( + this.removeChild(key)} + color="primary" + /> + ); + }, + ); const { classes } = this.props; return ( @@ -282,12 +370,15 @@ class ListComponent extends Component { - + ({ + root: { + position: 'relative', + marginBottom: theme.spacing(1), + }, + bottom: { + color: fontColor, + }, + top: { + color: primaryColor, + animationDuration: '550ms', + position: 'absolute', + left: 0, + }, + circle: { + strokeLinecap: 'round', + }, +})); + +const CircularLoader = () => { + const classes = useStyles(); + + return ( +
+ + +
+ ); +}; + +export default CircularLoader; diff --git a/webapp/components/general/NetPyNEAddNew.js b/webapp/components/general/NetPyNEAddNew.js index 07757afb..3addeb47 100644 --- a/webapp/components/general/NetPyNEAddNew.js +++ b/webapp/components/general/NetPyNEAddNew.js @@ -30,6 +30,7 @@ class NetPyNEAddNew extends React.Component { id={this.props.id} className={classes.root} onClick={this.handleClick} + style={{ borderRadius: '50%' }} > diff --git a/webapp/components/general/NetPyNECoordsRange.js b/webapp/components/general/NetPyNECoordsRange.js index eacf42c4..0d35b5f9 100644 --- a/webapp/components/general/NetPyNECoordsRange.js +++ b/webapp/components/general/NetPyNECoordsRange.js @@ -9,46 +9,18 @@ import Utils from '../../Utils'; export default class NetPyNECoordsRange extends Component { constructor (props) { super(props); - this.state = { rangeType: undefined }; + this.state = { rangeType: undefined, rangeValue: [undefined, undefined] }; this._isMounted = false; } - triggerUpdate (updateMethod) { - // common strategy when triggering processing of a value change, delay it, every time there is a change we reset - if (this.updateTimer != undefined) { - clearTimeout(this.updateTimer); - } - this.updateTimer = setTimeout(updateMethod, 1000); - } - - componentDidUpdate (prevProps, prevState) { - if (this.props.name != prevProps.name) { - this.triggerUpdate(() => { - const message = `netpyne_geppetto.${this.props.model}['${this.props.name}']${(this.props.conds != undefined) ? `['${this.props.conds}']` : ''}`; - Utils - .evalPythonMessage(`[key in ${message} for key in ['${this.props.items[0].value}', '${this.props.items[1].value}']]`) - .then((response) => { - if (response[0] && this._isMounted === true) { - this.setState({ rangeType: this.props.items[0].value }); - } else if (response[1] && this._isMounted === true) { - this.setState({ rangeType: this.props.items[1].value }); - } else if (this._isMounted === true) { - this.setState({ rangeType: undefined }); - } - }); - }); - } else if (this.props.conds != prevProps.conds) { - this.updateLayout(); - } - } - componentDidMount () { this._isMounted = true; this.updateLayout(); } - updateLayout () { + componentDidUpdate (prevProps, prevState) { + if (this.props.name != prevProps.name) { const message = `netpyne_geppetto.${this.props.model}['${this.props.name}']${(this.props.conds != undefined) ? `['${this.props.conds}']` : ''}`; Utils .evalPythonMessage(`[key in ${message} for key in ['${this.props.items[0].value}', '${this.props.items[1].value}']]`) @@ -61,6 +33,52 @@ export default class NetPyNECoordsRange extends Component { this.setState({ rangeType: undefined }); } }); + } else if (this.props.conds != prevProps.conds) { + this.updateLayout(); + } + } + + updateLayout () { + const { + items, + model, + conds, + name, + } = this.props; + + const message = `netpyne_geppetto.${model}['${name}']${(conds !== undefined) + ? `['${conds}']` : ''}`; + const evalMessage = `[key in ${message} for key in ['${items[0].value}', '${items[1].value}']]` ; + + Utils + .evalPythonMessage(evalMessage) + .then((response) => { + + let rangeType = undefined ; + + if (response[0] && this._isMounted === true) { + rangeType = items[0].value ; + } else if (response[1] && this._isMounted === true) { + rangeType = items[1].value ; + } + + this.setState({ rangeType }); + + if (rangeType) + { + const pythonMessage = `netpyne_geppetto.${model}['${name}']['${conds}']['${this.state.rangeType}']` ; + + Utils + .evalPythonMessage(pythonMessage) + .then((response) => { + if (response && response.length > 0 ) { + this.setState({ rangeValue: response }); + }}); + } + else { + this.setState({ rangeValue: [undefined, undefined] }); + } + }); } createMenuItems = () => this.props.items.map((obj) => ( @@ -77,6 +95,73 @@ export default class NetPyNECoordsRange extends Component { this._isMounted = false; } + handleRangeTypeChange(event) { + const { + model, + conds, + name, + } = this.props; + + const rangeType = event.target.value ; + + if (this.state.rangeType && this.state.rangeType.length > 0) + { + const pyPath = `netpyne_geppetto.${model}['${name}']['${conds}']`; + const startLetter = String(this.state.rangeType)[0]; + const pythonMessageDelOpposite = `${pyPath} = {k: v for k, v in ${pyPath}.items() if not k.startswith('${startLetter}')}`; + Utils.execPythonMessage( + pythonMessageDelOpposite + ); + + const rangeValue = this.state.rangeValue ; + + if (!rangeValue.some(e => e === undefined)) + { + const pythonMessage = `netpyne_geppetto.${model}['${name}']['${conds}']['${rangeType}'] = [${rangeValue}]` ; + Utils.execPythonMessage( + pythonMessage + ); + } + } + + this.setState({ rangeType}) + } + + //preConds: pop, cellType, cellModel, x, y, z, xnorm, ynorm, znorm + handleCoordParamChange(index, newValue) { + const { + model, + conds, + name, + } = this.props; + + + if (newValue === '' || (/^\d+$/.test(newValue))) { + if (this.state.rangeType && this.state.rangeType.length > 0) + { + const pyPath = `netpyne_geppetto.${model}['${name}']['${conds}']`; + const startLetter = String(this.state.rangeType)[0]; + const pythonMessageDelOpposite = `${pyPath} = {k: v for k, v in ${pyPath}.items() if not k.startswith('${startLetter}')}`; + Utils.execPythonMessage( + pythonMessageDelOpposite + ); + } + + const rangeValue = this.state.rangeValue ; + rangeValue[index] = newValue ; + + if (!rangeValue.some(e => e === undefined)) + { + const pythonMessage = `netpyne_geppetto.${model}['${name}']['${conds}']['${this.state.rangeType}'] = [${rangeValue}]` ; + Utils.execPythonMessage( + pythonMessage + ); + } + + this.setState({ rangeValue }) + } + } + render () { if (this.props.conds != undefined) { var meta = `${this.props.model}.${this.props.conds}.${this.props.items[0].value}`; @@ -87,6 +172,10 @@ export default class NetPyNECoordsRange extends Component { } const min = `${this.props.id}MinRange`; const max = `${this.props.id}MaxRange`; + + const minVal = this.state.rangeValue[0]; + const maxVal = this.state.rangeValue[1]; + return (
@@ -94,7 +183,7 @@ export default class NetPyNECoordsRange extends Component { id={`${this.props.id}Select`} label="Range type" value={this.state.rangeType || ''} - onChange={(event) => this.setState({ rangeType: event.target.value })} + onChange={(event) => { this.handleRangeTypeChange(event); }} > {this.createMenuItems()} @@ -102,27 +191,8 @@ export default class NetPyNECoordsRange extends Component { {(this.state.rangeType != undefined) ? ( - { - if (!state[state.lastUpdated].toString() - .endsWith('.') - && ((!isNaN(parseFloat(state[min]))) && (!isNaN(parseFloat(state[max]))))) { - return [parseFloat(state[min]), parseFloat(state[max])]; - } - }} - convertFromPython={(prevProps, prevState, value) => { - if (value != undefined && prevProps.value != value && value != '') { - const output = {}; - output[min] = value[0]; - output[max] = value[1]; - return output; - } - }} - > - - - + { this.handleCoordParamChange(0, parseInt(e.target.value)) } } /> + { this.handleCoordParamChange(1, parseInt(e.target.value)) } } /> ) : null} diff --git a/webapp/components/general/NetPyNEField.js b/webapp/components/general/NetPyNEField.js index eb3bd89f..cc84e686 100644 --- a/webapp/components/general/NetPyNEField.js +++ b/webapp/components/general/NetPyNEField.js @@ -1,35 +1,21 @@ import React, { Component } from 'react'; -import Dialog from '@material-ui/core/Dialog'; -import Button from '@material-ui/core/Button'; import MenuItem from '@material-ui/core/MenuItem'; - -import DialogActions from '@material-ui/core/DialogActions'; -import DialogContent from '@material-ui/core/DialogContent'; -import DialogContentText from '@material-ui/core/DialogContentText'; -import DialogTitle from '@material-ui/core/DialogTitle'; import { Tooltip } from 'netpyne/components'; import Grid from '@material-ui/core/Grid'; import Box from '@material-ui/core/Box'; import Utils from '../../Utils'; +import { REAL_TYPE } from '../../constants'; export default class NetPyNEField extends Component { constructor (props) { super(props); - this.state = { openHelp: false }; + this.state = { open: false }; } - handleOpenHelp = (help) => { - this.setState({ openHelp: true, helpText: help }); - }; - - handleCloseHelp = () => { - this.setState({ openHelp: false }); - }; - setErrorMessage (value) { return new Promise((resolve, reject) => { - if (this.realType == 'func') { - if (value != '' && value != undefined) { + if (this.realType === REAL_TYPE.FUNC) { + if (value !== '' && value !== undefined) { Utils.evalPythonMessage('netpyne_geppetto.validateFunction', [ value, ]).then((response) => { @@ -42,7 +28,7 @@ export default class NetPyNEField extends Component { } else { resolve({ errorMsg: '' }); } - } else if (this.realType == 'float') { + } else if (this.realType === REAL_TYPE.FLOAT) { if (isNaN(value)) { resolve({ errorMsg: 'Only float allowed' }); } else { @@ -53,57 +39,32 @@ export default class NetPyNEField extends Component { } prePythonSyncProcessing (value) { - if (value == '') { - if (this.default != undefined) { + if (value === '') { + if (this.default !== undefined) { return this.default; } if ( !this.model.split('.')[0].startsWith('simConfig') || this.model.split('.')[1].startsWith('analysis') ) { - Utils.execPythonMessage(`del netpyne_geppetto.${this.model}`); + Utils.execPythonMessage(` + try: + del netpyne_geppetto.${this.model} + except KeyError: + ...`); } } return value; } + handleTooltip (action) { + this.setState({ open: action }); + } + render () { - const help = Utils.getMetadataField(this.props.id, 'help'); - if (help != undefined && help != '') { - const helpComponent = ( -
- -
-