From 7f41377735a98f8f23261a19f16c7b0826ab9672 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 25 Mar 2022 18:24:56 +0100 Subject: [PATCH 001/143] Add Authentication type as option --- frontend/src/environments/environment.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/environments/environment.ts b/frontend/src/environments/environment.ts index 2fb970a40..453614433 100644 --- a/frontend/src/environments/environment.ts +++ b/frontend/src/environments/environment.ts @@ -3,4 +3,5 @@ export const environment = { backend_url: '/api/v1', privacy: 'https://example.com/privacy', imprint: 'https://example.com/imprint', + authentication: 'AUTHENTICATION_TYPE', }; From 885f8933e688747c12945b8c3dece098d53609bb Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 25 Mar 2022 18:26:11 +0100 Subject: [PATCH 002/143] Restructure authentication --- backend/Makefile | 2 +- backend/setup.cfg | 9 ++-- .../database/__init__.py | 14 ++--- .../database/git_models.py | 0 .../database/jenkins.py | 0 .../t4cclient/core/authentication/helper.py | 7 +++ .../{oauth => authentication}/jwt_bearer.py | 0 .../core/authentication/provider/__init__.py | 0 .../authentication/provider/azure/__init__.py | 1 + .../authentication/provider/azure/routes.py} | 23 +++----- .../authentication/provider/oauth/__init__.py | 1 + .../authentication/provider/oauth/flow.py | 32 +++++++++++ .../authentication/provider/oauth/routes.py | 30 +++++++++++ .../authentication/schemas.py} | 18 +++---- backend/t4cclient/core/oauth/__init__.py | 53 ------------------- .../extensions/backups/ease/routes.py | 5 +- .../extensions/backups/jenkins/routes.py | 14 +++-- .../extensions/modelsources/git/routes.py | 18 +++---- .../extensions/modelsources/t4c/routes.py | 7 +-- backend/t4cclient/routes/__init__.py | 28 +++++++++- backend/t4cclient/routes/guacamole.py | 6 +-- backend/t4cclient/routes/notices.py | 6 +-- .../t4cclient/routes/repositories/__init__.py | 18 +++---- .../t4cclient/routes/repositories/users.py | 17 +++--- backend/t4cclient/routes/sessions.py | 25 +++++---- backend/t4cclient/routes/sync.py | 4 +- backend/t4cclient/routes/users.py | 18 +++---- capella-dockerimages | 2 +- .../src/app/services/auth/auth.service.ts | 8 +-- .../backend/backend_env.configmap.yaml | 1 - 30 files changed, 202 insertions(+), 165 deletions(-) rename backend/t4cclient/core/{oauth => authentication}/database/__init__.py (83%) rename backend/t4cclient/core/{oauth => authentication}/database/git_models.py (100%) rename backend/t4cclient/core/{oauth => authentication}/database/jenkins.py (100%) create mode 100644 backend/t4cclient/core/authentication/helper.py rename backend/t4cclient/core/{oauth => authentication}/jwt_bearer.py (100%) create mode 100644 backend/t4cclient/core/authentication/provider/__init__.py create mode 100644 backend/t4cclient/core/authentication/provider/azure/__init__.py rename backend/t4cclient/{routes/oauth.py => core/authentication/provider/azure/routes.py} (77%) create mode 100644 backend/t4cclient/core/authentication/provider/oauth/__init__.py create mode 100644 backend/t4cclient/core/authentication/provider/oauth/flow.py create mode 100644 backend/t4cclient/core/authentication/provider/oauth/routes.py rename backend/t4cclient/{schemas/oauth.py => core/authentication/schemas.py} (94%) delete mode 100644 backend/t4cclient/core/oauth/__init__.py diff --git a/backend/Makefile b/backend/Makefile index 3e45e1367..05d3d783d 100644 --- a/backend/Makefile +++ b/backend/Makefile @@ -1,5 +1,5 @@ DB_PORT = 5432 -VENV = .venv/bin +VENV = .venv39/bin database: docker start capella-collab-postgres || \ diff --git a/backend/setup.cfg b/backend/setup.cfg index ec8d3e168..26d049226 100644 --- a/backend/setup.cfg +++ b/backend/setup.cfg @@ -5,7 +5,6 @@ description = Backend for the T4C Client Manager to request T4C Docker Container author = Moritz Weber author_email = moritz.weber@deutschebahn.com - [options] packages = find: install_requires = @@ -21,7 +20,8 @@ install_requires = python-dateutil msal cachetools - + uvicorn[standard] + PyYAML [options.entry_points] capellacollab.extensions.backups = @@ -32,4 +32,7 @@ capellacollab.extensions.modelsources = t4c = t4cclient.extensions.modelsources.t4c capellacollab.operators = k8s = t4cclient.core.operators.k8s:KubernetesOperator - docker = t4cclient.core.operators.docker:DockerOperator \ No newline at end of file + docker = t4cclient.core.operators.docker:DockerOperator +capellacollab.authentication.providers = + oauth = t4cclient.core.authentication.provider.oauth + azure = t4cclient.core.authentication.provider.azure \ No newline at end of file diff --git a/backend/t4cclient/core/oauth/database/__init__.py b/backend/t4cclient/core/authentication/database/__init__.py similarity index 83% rename from backend/t4cclient/core/oauth/database/__init__.py rename to backend/t4cclient/core/authentication/database/__init__.py index 1f6972f56..f648aa3ee 100644 --- a/backend/t4cclient/core/oauth/database/__init__.py +++ b/backend/t4cclient/core/authentication/database/__init__.py @@ -1,10 +1,12 @@ from fastapi import Depends, HTTPException from sqlalchemy import true from t4cclient.config import USERNAME_CLAIM +from t4cclient.core.authentication.helper import get_username +from t4cclient.core.authentication.jwt_bearer import JWTBearer from t4cclient.core.database import get_db, repository_users from t4cclient.core.database.users import get_user -from t4cclient.core.oauth.jwt_bearer import JWTBearer -from t4cclient.schemas.repositories import RepositoryUserPermission, RepositoryUserRole +from t4cclient.schemas.repositories import (RepositoryUserPermission, + RepositoryUserRole) from t4cclient.schemas.repositories.users import Role @@ -17,7 +19,7 @@ def verify_admin(token=Depends(JWTBearer()), db=Depends(get_db)): def is_admin(token=Depends(JWTBearer()), db=Depends(get_db)) -> bool: - return get_user(db=db, username=token[USERNAME_CLAIM]).role == Role.ADMIN + return get_user(db=db, username=get_username(token)).role == Role.ADMIN def verify_repository_role( @@ -40,7 +42,7 @@ def check_repository_role( db=Depends(get_db), ) -> bool: - user = get_user(db=db, username=token[USERNAME_CLAIM]) + user = get_user(db=db, username=get_username(token)) return any( ( "user" in allowed_roles @@ -81,7 +83,7 @@ def check_write_permission( db=Depends(get_db), ) -> bool: - user = repository_users.get_user_of_repository(db, repository, token[USERNAME_CLAIM]) + user = repository_users.get_user_of_repository(db, repository, get_username(token)) if not user: - return get_user(db=db, username=token[USERNAME_CLAIM]).role == Role.ADMIN + return get_user(db=db, username=get_username(token)).role == Role.ADMIN return RepositoryUserPermission.WRITE == user.permission diff --git a/backend/t4cclient/core/oauth/database/git_models.py b/backend/t4cclient/core/authentication/database/git_models.py similarity index 100% rename from backend/t4cclient/core/oauth/database/git_models.py rename to backend/t4cclient/core/authentication/database/git_models.py diff --git a/backend/t4cclient/core/oauth/database/jenkins.py b/backend/t4cclient/core/authentication/database/jenkins.py similarity index 100% rename from backend/t4cclient/core/oauth/database/jenkins.py rename to backend/t4cclient/core/authentication/database/jenkins.py diff --git a/backend/t4cclient/core/authentication/helper.py b/backend/t4cclient/core/authentication/helper.py new file mode 100644 index 000000000..33af5c101 --- /dev/null +++ b/backend/t4cclient/core/authentication/helper.py @@ -0,0 +1,7 @@ +import typing as t + +from t4cclient import config + + +def get_username(token: t.Dict[str, t.Any]) -> str: + return token[config.USERNAME_CLAIM].strip() diff --git a/backend/t4cclient/core/oauth/jwt_bearer.py b/backend/t4cclient/core/authentication/jwt_bearer.py similarity index 100% rename from backend/t4cclient/core/oauth/jwt_bearer.py rename to backend/t4cclient/core/authentication/jwt_bearer.py diff --git a/backend/t4cclient/core/authentication/provider/__init__.py b/backend/t4cclient/core/authentication/provider/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/backend/t4cclient/core/authentication/provider/azure/__init__.py b/backend/t4cclient/core/authentication/provider/azure/__init__.py new file mode 100644 index 000000000..e10a8668b --- /dev/null +++ b/backend/t4cclient/core/authentication/provider/azure/__init__.py @@ -0,0 +1 @@ +from . import routes \ No newline at end of file diff --git a/backend/t4cclient/routes/oauth.py b/backend/t4cclient/core/authentication/provider/azure/routes.py similarity index 77% rename from backend/t4cclient/routes/oauth.py rename to backend/t4cclient/core/authentication/provider/azure/routes.py index dde61e51e..e0c02deb9 100644 --- a/backend/t4cclient/routes/oauth.py +++ b/backend/t4cclient/core/authentication/provider/azure/routes.py @@ -5,18 +5,11 @@ from cachetools import TTLCache from fastapi import APIRouter, Depends from msal import ConfidentialClientApplication - -from t4cclient.config import ( - OAUTH_CLIENT_ID, - OAUTH_CLIENT_SECRET, - OAUTH_ENDPOINT, -) -from t4cclient.core.oauth import ( - jwt_bearer, - OAuthStub, -) -from t4cclient.schemas.oauth import RefreshTokenRequest, TokenRequest - +from t4cclient.config import (OAUTH_CLIENT_ID, OAUTH_CLIENT_SECRET, + OAUTH_ENDPOINT) +from t4cclient.core.authentication import jwt_bearer +from t4cclient.core.authentication.schemas import (RefreshTokenRequest, + TokenRequest) router = APIRouter() @@ -30,7 +23,7 @@ def ad_session(): global_session_data = TTLCache(maxsize=128, ttl=3600) -@router.get("/", name="Get redirect URL for OAuth") +@router.get("/", name="Get redirect URL for azure authentication") async def get_redirect_url(): state = secrets.token_hex(32) assert state not in global_session_data @@ -55,8 +48,8 @@ async def api_refresh_token(body: RefreshTokenRequest): return ad_session().acquire_token_by_refresh_token(body.refresh_token, scopes=[]) -@router.get("/logout", name="Invalidate the token (log out)") -async def validate_token(jwt_decoded=Depends(jwt_bearer.JWTBearer())): +@router.delete("/tokens", name="Invalidate the token (log out)") +async def logout(jwt_decoded=Depends(jwt_bearer.JWTBearer())): for account in ad_session().get_accounts(): if account["username"] == jwt_decoded["preferred_username"]: return ad_session().remove_account(account) diff --git a/backend/t4cclient/core/authentication/provider/oauth/__init__.py b/backend/t4cclient/core/authentication/provider/oauth/__init__.py new file mode 100644 index 000000000..e10a8668b --- /dev/null +++ b/backend/t4cclient/core/authentication/provider/oauth/__init__.py @@ -0,0 +1 @@ +from . import routes \ No newline at end of file diff --git a/backend/t4cclient/core/authentication/provider/oauth/flow.py b/backend/t4cclient/core/authentication/provider/oauth/flow.py new file mode 100644 index 000000000..56e45f5eb --- /dev/null +++ b/backend/t4cclient/core/authentication/provider/oauth/flow.py @@ -0,0 +1,32 @@ +import typing as t + +from requests_oauthlib import OAuth2Session +from t4cclient.config import (OAUTH_CLIENT_ID, OAUTH_CLIENT_SECRET, + OAUTH_ENDPOINT, OAUTH_REDIRECT_URI, + OAUTH_TOKEN_ENDPOINT) + +auth_session = OAuth2Session(OAUTH_CLIENT_ID, redirect_uri=OAUTH_REDIRECT_URI) + + +def get_auth_redirect_url() -> t.Dict[str, str]: + auth_url, state = auth_session.authorization_url( + OAUTH_ENDPOINT + "/authorize", grant_type="authorization_code" + ) + return {"auth_url": auth_url, "state": state} + + +def get_token(code: str) -> t.Dict[str, t.Any]: + return auth_session.fetch_token( + OAUTH_TOKEN_ENDPOINT, + code=code, + client_id=OAUTH_CLIENT_ID, + client_secret=OAUTH_CLIENT_SECRET, + ) + +def refresh_token(refresh_token: str) -> t.Dict[str, t.Any]: + return auth_session.refresh_token( + OAUTH_TOKEN_ENDPOINT, + refresh_token=refresh_token, + client_id=OAUTH_CLIENT_ID, + client_secret=OAUTH_CLIENT_SECRET, + ) diff --git a/backend/t4cclient/core/authentication/provider/oauth/routes.py b/backend/t4cclient/core/authentication/provider/oauth/routes.py new file mode 100644 index 000000000..09311390e --- /dev/null +++ b/backend/t4cclient/core/authentication/provider/oauth/routes.py @@ -0,0 +1,30 @@ +from fastapi import APIRouter, Depends +from t4cclient.core.authentication import jwt_bearer +from t4cclient.core.authentication.schemas import (RefreshTokenRequest, + TokenRequest) + +from .flow import get_auth_redirect_url, get_token, refresh_token + +router = APIRouter() + +@router.get("/", name="Get redirect URL for OAuth") +async def get_redirect_url(): + return get_auth_redirect_url() + + +@router.post("/tokens", name="Create access_token") +async def api_get_token(body: TokenRequest): + return get_token(body.code) + + +@router.put("/tokens", name="Refresh the access_token") +async def api_refresh_token(body: RefreshTokenRequest): + return refresh_token(body.refresh_token) + +@router.delete("/tokens", name="Invalidate the token (log out)") +async def logout(jwt_decoded=Depends(jwt_bearer.JWTBearer())): + return None + +@router.get("/tokens", name="Validate the token") +async def validate_token(jwt_decoded=Depends(jwt_bearer.JWTBearer())): + return jwt_decoded diff --git a/backend/t4cclient/schemas/oauth.py b/backend/t4cclient/core/authentication/schemas.py similarity index 94% rename from backend/t4cclient/schemas/oauth.py rename to backend/t4cclient/core/authentication/schemas.py index 33d2ad5fc..f5aa3cfab 100644 --- a/backend/t4cclient/schemas/oauth.py +++ b/backend/t4cclient/core/authentication/schemas.py @@ -1,9 +1,9 @@ -from pydantic import BaseModel - - -class TokenRequest(BaseModel): - code: str - state: str - -class RefreshTokenRequest(BaseModel): - refresh_token: str +from pydantic import BaseModel + + +class TokenRequest(BaseModel): + code: str + state: str + +class RefreshTokenRequest(BaseModel): + refresh_token: str diff --git a/backend/t4cclient/core/oauth/__init__.py b/backend/t4cclient/core/oauth/__init__.py deleted file mode 100644 index b958becf8..000000000 --- a/backend/t4cclient/core/oauth/__init__.py +++ /dev/null @@ -1,53 +0,0 @@ -import typing as t - -from requests_oauthlib import OAuth2Session -from t4cclient.config import ( - OAUTH_CLIENT_ID, - OAUTH_CLIENT_SECRET, - OAUTH_ENDPOINT, - OAUTH_REDIRECT_URI, - OAUTH_TOKEN_ENDPOINT, -) - -auth_session = OAuth2Session(OAUTH_CLIENT_ID, redirect_uri=OAUTH_REDIRECT_URI) - - -def get_auth_redirect_url(state) -> t.Dict[str, str]: - auth_url, state = auth_session.authorization_url( - OAUTH_ENDPOINT + "/authorize", state=state, grant_type="authorization_code" - ) - return {"auth_url": auth_url, "state": state} - - -def get_token(code: str) -> t.Dict[str, t.Any]: - return auth_session.fetch_token( - OAUTH_TOKEN_ENDPOINT, - code=code, - client_id=OAUTH_CLIENT_ID, - client_secret=OAUTH_CLIENT_SECRET, - ) - - -def refresh_token(refresh_token: str) -> t.Dict[str, t.Any]: - return auth_session.refresh_token( - OAUTH_TOKEN_ENDPOINT, - refresh_token=refresh_token, - client_id=OAUTH_CLIENT_ID, - client_secret=OAUTH_CLIENT_SECRET, - ) - -class OAuthStub: - def initiate_auth_code_flow(self, scopes, state): - return get_auth_redirect_url(state) - - def acquire_token_by_auth_code_flow(self, auth_data, body, scopes=[]): - get_token(body.code) - - def acquire_token_by_refresh_token(self, body, scopes=[]): - ... - - def get_accounts(self): - return [] - - def remove_account(self, account): - ... diff --git a/backend/t4cclient/extensions/backups/ease/routes.py b/backend/t4cclient/extensions/backups/ease/routes.py index 82a097664..c294e6b53 100644 --- a/backend/t4cclient/extensions/backups/ease/routes.py +++ b/backend/t4cclient/extensions/backups/ease/routes.py @@ -3,13 +3,13 @@ import uuid import requests -import t4cclient.core.oauth.database as auth +import t4cclient.core.authentication.database as auth from fastapi import APIRouter, Depends from requests import Session from t4cclient import config, extensions from t4cclient.core import credentials +from t4cclient.core.authentication.jwt_bearer import JWTBearer from t4cclient.core.database import get_db -from t4cclient.core.oauth.jwt_bearer import JWTBearer from t4cclient.core.operators import OPERATOR from t4cclient.extensions.modelsources import git, t4c from t4cclient.routes.open_api_configuration import AUTHENTICATION_RESPONSES @@ -112,6 +112,7 @@ def delete_backup( OPERATOR.delete_cronjob(backup.reference) crud.delete_backup(db, project, id) + return None @router.post( diff --git a/backend/t4cclient/extensions/backups/jenkins/routes.py b/backend/t4cclient/extensions/backups/jenkins/routes.py index 43e2a2f6c..dbf2651ed 100644 --- a/backend/t4cclient/extensions/backups/jenkins/routes.py +++ b/backend/t4cclient/extensions/backups/jenkins/routes.py @@ -5,11 +5,13 @@ import t4cclient.extensions.backups.jenkins.models as jenkins_schema from fastapi import APIRouter, Depends from requests import Session +from t4cclient.core.authentication.database import verify_repository_role +from t4cclient.core.authentication.database.git_models import \ + verify_gitmodel_permission +from t4cclient.core.authentication.database.jenkins import \ + verify_jenkins_permission +from t4cclient.core.authentication.jwt_bearer import JWTBearer from t4cclient.core.database import get_db -from t4cclient.core.oauth.database import verify_repository_role -from t4cclient.core.oauth.database.git_models import verify_gitmodel_permission -from t4cclient.core.oauth.database.jenkins import verify_jenkins_permission -from t4cclient.core.oauth.jwt_bearer import JWTBearer from t4cclient.extensions.backups import jenkins from t4cclient.routes.open_api_configuration import AUTHENTICATION_RESPONSES @@ -91,7 +93,8 @@ def delete_pipeline( db=db, ) jenkins.remove_pipeline(pipeline_name) - return jenkins_database.remove_pipeline_by_name(db, pipeline_name) + jenkins_database.remove_pipeline_by_name(db, pipeline_name) + return None @router.post( @@ -116,3 +119,4 @@ def create_jenkins_job( db=db, ) jenkins.trigger_job_run(pipeline_name) + return None diff --git a/backend/t4cclient/extensions/modelsources/git/routes.py b/backend/t4cclient/extensions/modelsources/git/routes.py index 0c9247284..618c1266e 100644 --- a/backend/t4cclient/extensions/modelsources/git/routes.py +++ b/backend/t4cclient/extensions/modelsources/git/routes.py @@ -3,18 +3,15 @@ from fastapi import APIRouter, Depends from requests import Session +from t4cclient.core.authentication.database import verify_repository_role +from t4cclient.core.authentication.database.git_models import \ + verify_gitmodel_permission +from t4cclient.core.authentication.jwt_bearer import JWTBearer from t4cclient.core.database import get_db -from t4cclient.core.oauth.database import verify_repository_role -from t4cclient.core.oauth.database.git_models import verify_gitmodel_permission -from t4cclient.core.oauth.jwt_bearer import JWTBearer from t4cclient.extensions.modelsources import git from t4cclient.extensions.modelsources.git.models import ( - GetRepositoryGitModel, - PatchRepositoryGitModel, - PostGitModel, - RepositoryGitInnerModel, - RepositoryGitModel, -) + GetRepositoryGitModel, PatchRepositoryGitModel, PostGitModel, + RepositoryGitInnerModel, RepositoryGitModel) from t4cclient.routes.open_api_configuration import AUTHENTICATION_RESPONSES router = APIRouter() @@ -76,7 +73,8 @@ def unassign_model_from_repository( project, allowed_roles=["manager", "administrator"], token=token, db=db ) verify_gitmodel_permission(project, model_id, db) - return git.crud.delete_model_from_repository(db, project, model_id) + git.crud.delete_model_from_repository(db, project, model_id) + return None @router.patch( diff --git a/backend/t4cclient/extensions/modelsources/t4c/routes.py b/backend/t4cclient/extensions/modelsources/t4c/routes.py index a890bde1d..d78fec158 100644 --- a/backend/t4cclient/extensions/modelsources/t4c/routes.py +++ b/backend/t4cclient/extensions/modelsources/t4c/routes.py @@ -5,8 +5,9 @@ import t4cclient.schemas.repositories.projects as schema_projects from fastapi import APIRouter, Depends from requests import Session -from t4cclient.core.oauth.database import verify_admin, verify_repository_role -from t4cclient.core.oauth.jwt_bearer import JWTBearer +from t4cclient.core.authentication.database import (verify_admin, + verify_repository_role) +from t4cclient.core.authentication.jwt_bearer import JWTBearer from t4cclient.routes.open_api_configuration import AUTHENTICATION_RESPONSES router = APIRouter() @@ -58,7 +59,7 @@ def delete_project_from_repository( token=Depends(JWTBearer()), ): verify_admin(token, db) - return database_projects.delete_project( + database_projects.delete_project( db, id=project_id, repo_name=project, diff --git a/backend/t4cclient/routes/__init__.py b/backend/t4cclient/routes/__init__.py index b2fa2d149..cda9900da 100644 --- a/backend/t4cclient/routes/__init__.py +++ b/backend/t4cclient/routes/__init__.py @@ -1,11 +1,35 @@ +import logging +from importlib import metadata + from fastapi import APIRouter +from t4cclient import config + +from ..core.authentication.provider.azure import routes +from . import notices, repositories, sessions, sync, users -from . import notices, oauth, repositories, sessions, sync, users +log = logging.getLogger(__name__) router = APIRouter() router.include_router(sessions.router, prefix="/sessions", tags=["Sessions"]) router.include_router(sync.router, prefix="/sync", tags=["T4C Server Synchronization"]) router.include_router(repositories.router, prefix="/projects") router.include_router(users.router, prefix="/users", tags=["Users"]) -router.include_router(oauth.router, prefix="/auth/oauth", tags=["Authentication"]) router.include_router(notices.router, prefix="/notices", tags=["Notices"]) + +# Load authentication routes +try: + ep = next( + i + for i in metadata.entry_points()["capellacollab.authentication.providers"] + if i.name == config.AUTHENTICATION_PROVIDER + ) + router.include_router( + ep.load().routes.router, + prefix="/{project}/extensions/backups/" + ep.name, + tags=[ep.name], + ) +except StopIteration: + raise ValueError(f"Unknown authentication provider {config.AUTHENTICATION_PROVIDER}") from None + +router.include_router(ep.load().routes.router, prefix="/authentication", tags=[ep.name]) + diff --git a/backend/t4cclient/routes/guacamole.py b/backend/t4cclient/routes/guacamole.py index 51ba85521..4da42384a 100644 --- a/backend/t4cclient/routes/guacamole.py +++ b/backend/t4cclient/routes/guacamole.py @@ -3,14 +3,12 @@ from fastapi import APIRouter, Depends, HTTPException from requests import Session from t4cclient.config import GUACAMOLE_PUBLIC_URI, USERNAME_CLAIM +from t4cclient.core.authentication.jwt_bearer import JWTBearer from t4cclient.core.database import get_db, sessions -from t4cclient.core.oauth.jwt_bearer import JWTBearer from t4cclient.extensions import guacamole from t4cclient.routes.open_api_configuration import AUTHENTICATION_RESPONSES from t4cclient.schemas.guacamole import GuacamoleAuthentication - - router = APIRouter() @@ -25,7 +23,7 @@ def create_guacamole_token( token=Depends(JWTBearer()), ): session = sessions.get_session_by_id(db, id) - if session.owner_name != token[USERNAME_CLAIM]: + if session.owner_name != get_username(token): raise HTTPException( status_code=403, detail="The owner of the session does not match with your username.", diff --git a/backend/t4cclient/routes/notices.py b/backend/t4cclient/routes/notices.py index 178ed3572..9e0d78931 100644 --- a/backend/t4cclient/routes/notices.py +++ b/backend/t4cclient/routes/notices.py @@ -2,9 +2,9 @@ from fastapi import APIRouter, Depends from requests import Session +from t4cclient.core.authentication.database import verify_admin +from t4cclient.core.authentication.jwt_bearer import JWTBearer from t4cclient.core.database import get_db, notices -from t4cclient.core.oauth.database import verify_admin -from t4cclient.core.oauth.jwt_bearer import JWTBearer from t4cclient.routes.open_api_configuration import AUTHENTICATION_RESPONSES from t4cclient.schemas.notices import CreateNoticeRequest, NoticeResponse @@ -41,4 +41,4 @@ def create_notice( ) def delete_notice(id: int, db: Session = Depends(get_db), token=Depends(JWTBearer())): verify_admin(token, db) - return notices.delete_notice(db, id) + notices.delete_notice(db, id) diff --git a/backend/t4cclient/routes/repositories/__init__.py b/backend/t4cclient/routes/repositories/__init__.py index f5f98a7b8..8699ccda6 100644 --- a/backend/t4cclient/routes/repositories/__init__.py +++ b/backend/t4cclient/routes/repositories/__init__.py @@ -6,18 +6,18 @@ from fastapi import APIRouter, Depends from requests import Session from t4cclient.config import USERNAME_CLAIM +from t4cclient.core.authentication.database import (is_admin, verify_admin, + verify_repository_role) +from t4cclient.core.authentication.helper import get_username +from t4cclient.core.authentication.jwt_bearer import JWTBearer from t4cclient.core.database import get_db, repositories from t4cclient.core.database import users as database_users -from t4cclient.core.oauth.database import is_admin, verify_admin, verify_repository_role -from t4cclient.core.oauth.jwt_bearer import JWTBearer from t4cclient.extensions.modelsources.t4c import connection from t4cclient.routes.open_api_configuration import AUTHENTICATION_RESPONSES -from t4cclient.schemas.repositories import ( - GetRepositoryUserResponse, - PostRepositoryRequest, - RepositoryUserPermission, - RepositoryUserRole, -) +from t4cclient.schemas.repositories import (GetRepositoryUserResponse, + PostRepositoryRequest, + RepositoryUserPermission, + RepositoryUserRole) from . import users as router_users @@ -45,7 +45,7 @@ def get_repositories(db: Session = Depends(get_db), token=Depends(JWTBearer())): for repo in repositories.get_all_repositories(db) ] - db_user = database_users.get_user(db=db, username=token[USERNAME_CLAIM]) + db_user = database_users.get_user(db=db, username=get_username(token)) return [ GetRepositoryUserResponse( repository_name=repo.repository_name, diff --git a/backend/t4cclient/routes/repositories/users.py b/backend/t4cclient/routes/repositories/users.py index fe36635f3..f0663222a 100644 --- a/backend/t4cclient/routes/repositories/users.py +++ b/backend/t4cclient/routes/repositories/users.py @@ -5,14 +5,13 @@ from fastapi import APIRouter, Depends, HTTPException from requests import HTTPError, Session from t4cclient.config import USERNAME_CLAIM +from t4cclient.core.authentication.database import (check_username_not_admin, + is_admin, + verify_repository_role, + verify_write_permission) +from t4cclient.core.authentication.helper import get_username +from t4cclient.core.authentication.jwt_bearer import JWTBearer from t4cclient.core.database import get_db, repository_users, users -from t4cclient.core.oauth.database import ( - check_username_not_admin, - is_admin, - verify_repository_role, - verify_write_permission, -) -from t4cclient.core.oauth.jwt_bearer import JWTBearer from t4cclient.routes.open_api_configuration import AUTHENTICATION_RESPONSES router = APIRouter() @@ -94,7 +93,7 @@ def patch_repository_user( db=db, ) verify_write_permission(project, token, db) - if not is_admin(token, db) and token[USERNAME_CLAIM] != username: + if not is_admin(token, db) and get_username(token) != username: raise HTTPException( status_code=403, detail="The username does not match with your user. You have to be administrator to edit other users.", @@ -151,4 +150,4 @@ def remove_user_from_repository( ) check_username_not_admin(username, db) t4c_manager.remove_user_from_repository(project, username) - return repository_users.delete_user_from_repository(db, project, username) + repository_users.delete_user_from_repository(db, project, username) diff --git a/backend/t4cclient/routes/sessions.py b/backend/t4cclient/routes/sessions.py index 32fbcb8e0..aa0d234f2 100644 --- a/backend/t4cclient/routes/sessions.py +++ b/backend/t4cclient/routes/sessions.py @@ -9,23 +9,22 @@ from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from t4cclient.config import USERNAME_CLAIM +from t4cclient.core.authentication.database import (is_admin, + verify_repository_role) +from t4cclient.core.authentication.helper import get_username +from t4cclient.core.authentication.jwt_bearer import JWTBearer from t4cclient.core.credentials import generate_password from t4cclient.core.database import get_db, sessions, users -from t4cclient.core.oauth.database import is_admin, verify_repository_role -from t4cclient.core.oauth.jwt_bearer import JWTBearer from t4cclient.core.operators import OPERATOR from t4cclient.core.services.sessions import inject_attrs_in_sessions from t4cclient.extensions import guacamole from t4cclient.routes import guacamole as guacamole_route from t4cclient.routes.open_api_configuration import AUTHENTICATION_RESPONSES from t4cclient.schemas.repositories import RepositoryUserRole -from t4cclient.schemas.sessions import ( - AdvancedSessionResponse, - GetSessionsResponse, - GetSessionUsageResponse, - PostSessionRequest, - WorkspaceType, -) +from t4cclient.schemas.sessions import (AdvancedSessionResponse, + GetSessionsResponse, + GetSessionUsageResponse, + PostSessionRequest, WorkspaceType) from t4cclient.sql_models.sessions import DatabaseSession router = APIRouter() @@ -37,7 +36,7 @@ def get_current_sessions(db: Session = Depends(get_db), token=Depends(JWTBearer( if is_admin(token, db): return inject_attrs_in_sessions(sessions.get_all_sessions(db)) - db_user = users.get_user(db=db, username=token[USERNAME_CLAIM]) + db_user = users.get_user(db=db, username=get_username(token)) if not any( repo_user.role == RepositoryUserRole.MANAGER for repo_user in db_user.repositories @@ -71,7 +70,7 @@ def request_session( rdp_password = generate_password(length=64) - owner = token[USERNAME_CLAIM] + owner = get_username(token) log.info("Starting session creation for user %s", owner) @@ -103,7 +102,7 @@ def request_session( else: repositories = [repo.repository_name for repo in user.repositories] session = OPERATOR.start_persistent_session( - username=token[USERNAME_CLAIM], + username=get_username(token), password=rdp_password, repositories=repositories, ) @@ -169,7 +168,7 @@ def request_session( @router.delete("/{id}/", status_code=204, responses=AUTHENTICATION_RESPONSES) def end_session(id: str, db: Session = Depends(get_db), token=Depends(JWTBearer())): s = sessions.get_session_by_id(db, id) - if s.owner_name != token[USERNAME_CLAIM] and verify_repository_role( + if s.owner_name != get_username(token) and verify_repository_role( repository=s.repository, token=token, db=db, diff --git a/backend/t4cclient/routes/sync.py b/backend/t4cclient/routes/sync.py index 9585ad5b7..a3210b456 100644 --- a/backend/t4cclient/routes/sync.py +++ b/backend/t4cclient/routes/sync.py @@ -3,9 +3,9 @@ import t4cclient.extensions.modelsources.t4c.connection as t4c_manager from fastapi import APIRouter, Depends from requests import Session +from t4cclient.core.authentication import database as database_auth +from t4cclient.core.authentication.jwt_bearer import JWTBearer from t4cclient.core.database import get_db, repositories -from t4cclient.core.oauth import database as database_auth -from t4cclient.core.oauth.jwt_bearer import JWTBearer from t4cclient.routes.open_api_configuration import AUTHENTICATION_RESPONSES router = APIRouter() diff --git a/backend/t4cclient/routes/users.py b/backend/t4cclient/routes/users.py index 360fc34a5..268dbe88e 100644 --- a/backend/t4cclient/routes/users.py +++ b/backend/t4cclient/routes/users.py @@ -3,16 +3,14 @@ from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from t4cclient.config import USERNAME_CLAIM +from t4cclient.core.authentication.database import is_admin, verify_admin +from t4cclient.core.authentication.helper import get_username +from t4cclient.core.authentication.jwt_bearer import JWTBearer from t4cclient.core.database import get_db, repository_users, users -from t4cclient.core.oauth.database import is_admin, verify_admin -from t4cclient.core.oauth.jwt_bearer import JWTBearer from t4cclient.routes.open_api_configuration import AUTHENTICATION_RESPONSES from t4cclient.routes.sessions import inject_attrs_in_sessions -from t4cclient.schemas.repositories.users import ( - GetUserResponse, - PatchUserRoleRequest, - Role, -) +from t4cclient.schemas.repositories.users import (GetUserResponse, + PatchUserRoleRequest, Role) from t4cclient.schemas.sessions import AdvancedSessionResponse router = APIRouter() @@ -28,14 +26,14 @@ def get_users(token=Depends(JWTBearer()), db: Session = Depends(get_db)): @router.post("/", response_model=GetUserResponse, responses=AUTHENTICATION_RESPONSES) def create_user(token=Depends(JWTBearer()), db: Session = Depends(get_db)): - return users.create_user(db, token[USERNAME_CLAIM]) + return users.create_user(db, get_username(token)) @router.get( "/{username}", response_model=GetUserResponse, responses=AUTHENTICATION_RESPONSES ) def get_user(username: str, db: Session = Depends(get_db), token=Depends(JWTBearer())): - if username != token[USERNAME_CLAIM] and not is_admin(token, db): + if username != get_username(token) and not is_admin(token, db): raise HTTPException( status_code=403, detail="The username does not match with your username. You have to be administrator to see other users.", @@ -70,7 +68,7 @@ def update_role_of_user( def get_sessions_for_user( username: str, db: Session = Depends(get_db), token=Depends(JWTBearer()) ): - if username != token[USERNAME_CLAIM] and not is_admin(token, db): + if username != get_username(token) and not is_admin(token, db): raise HTTPException( status_code=403, detail="You can only see your own sessions. If you are a manager, please use the /sessions endpoint.", diff --git a/capella-dockerimages b/capella-dockerimages index 234873138..2eb365940 160000 --- a/capella-dockerimages +++ b/capella-dockerimages @@ -1 +1 @@ -Subproject commit 2348731382bf96025e534fb448dec778f106e9fb +Subproject commit 2eb365940cf4781de83c53ff8d89a04864f6261c diff --git a/frontend/src/app/services/auth/auth.service.ts b/frontend/src/app/services/auth/auth.service.ts index 54143757e..55236b8ce 100644 --- a/frontend/src/app/services/auth/auth.service.ts +++ b/frontend/src/app/services/auth/auth.service.ts @@ -15,13 +15,13 @@ export class AuthService { getRedirectURL(): Observable { return this.http.get( - environment.backend_url + '/auth/oauth' + environment.backend_url + '/authentication' ); } getAccessToken(code: string, state: string): Observable { return this.http.post( - environment.backend_url + '/auth/oauth/tokens', + environment.backend_url + '/authentication/tokens', { code, state, @@ -31,7 +31,7 @@ export class AuthService { refreshToken(refresh_token: string): Observable { return this.http.put( - environment.backend_url + '/auth/oauth/tokens', + environment.backend_url + '/authentication/tokens', { refresh_token } ); } @@ -42,7 +42,7 @@ export class AuthService { logOut() { return this.http - .get(environment.backend_url + '/auth/oauth/logout') + .get(environment.backend_url + '/authentication/logout') .toPromise() .then(() => { this.localStorageService.setValue('access_token', ''); diff --git a/helm/templates/backend/backend_env.configmap.yaml b/helm/templates/backend/backend_env.configmap.yaml index 007a73445..48cc9c8d5 100644 --- a/helm/templates/backend/backend_env.configmap.yaml +++ b/helm/templates/backend/backend_env.configmap.yaml @@ -35,7 +35,6 @@ data: KUBERNETES_NAMESPACE: {{ .Values.backend.k8sSessionNamespace }} KUBERNETES_STORAGE_CLASS_NAME: {{ .Values.backend.storageClassName }} KUBERNETES_STORAGE_ACCESS_MODE: {{ .Values.backend.storageAccessMode }} - KUBERNETES_RELEASE_NAME: {{ .Release.Name }} OPERATOR_TYPE: kubernetes JENKINS_USERNAME: {{ .Values.jenkins.username }} JENKINS_PASSWORD: {{ .Values.jenkins.password }} From 9492f510f077dfc9fa2323b9c78603f016604080 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 25 Mar 2022 18:27:07 +0100 Subject: [PATCH 003/143] WIP: Implement yaml based configuration --- backend/t4cclient/config.py | 106 +++++++++++------------------------- 1 file changed, 33 insertions(+), 73 deletions(-) diff --git a/backend/t4cclient/config.py b/backend/t4cclient/config.py index 616fd0fed..f5415f5de 100644 --- a/backend/t4cclient/config.py +++ b/backend/t4cclient/config.py @@ -1,87 +1,47 @@ -import configparser +import abc import logging import os -import pathlib +import typing as t -config_parser = configparser.RawConfigParser() -config_directory = pathlib.Path(__file__).parents[1] / "config" -config_file_path = config_directory / "config.ini" -config_parser.read(config_file_path) +import yaml -log = logging.getLogger(__name__) - - -def get_config(group: str, key: str, fallback: str = "") -> str: - config = config_parser.get( - group, key, fallback=os.environ.get(f"{group}_{key.upper()}", fallback) - ) - - if not config: - log.warning( - "Configuration %s of group %s not found. Defaulting to empty string.", - key, - group, - ) +_KT = t.TypeVar("_KT") - return config - - -PERSISTENT_IMAGE = get_config("DOCKER", "PERSISTENT_IMAGE") -READONLY_IMAGE = get_config("DOCKER", "READONLY_IMAGE") -EASE_IMAGE = get_config("DOCKER", "EASE_IMAGE") -IMPORTER_IMAGE = get_config("DOCKER", "IMPORTER_IMAGE") -WORKSPACE_MOUNT_VOLUME = get_config("DOCKER", "WORKSPACE_MOUNT_VOLUME") -DOCKER_PORT_RANGE = get_config("DOCKER", "PORT_RANGE") -DOCKER_HOST = get_config("DOCKER", "CONTAINER_HOST") - -GUACAMOLE_URI = get_config("GUACAMOLE", "BASE_URI") -GUACAMOLE_PUBLIC_URI = get_config("GUACAMOLE", "PUBLIC_URI") -GUACAMOLE_USERNAME = get_config("GUACAMOLE", "USERNAME") -GUACAMOLE_PASSWORD = get_config("GUACAMOLE", "PASSWORD") +log = logging.getLogger(__name__) -OAUTH_TOKEN_ENDPOINT = get_config("OAUTH", "token_issuance_endpoint") -OAUTH_ENDPOINT = get_config("OAUTH", "authorization_endpoint") -OAUTH_CLIENT_ID = get_config("OAUTH", "client_id") -OAUTH_CLIENT_SECRET = get_config("OAUTH", "client_secret") -OAUTH_REDIRECT_URI = get_config("OAUTH", "redirect_uri") -USERNAME_CLAIM = get_config("OAUTH", "USERNAME_CLAIM") -DATABASE_URL = get_config("SQL", "DATABASE_URL") +class ConfigDict(dict): + path = [] -T4C_SERVER_USERNAME = get_config("T4C_SERVER", "USERNAME") -T4C_SERVER_PASSWORD = get_config("T4C_SERVER", "PASSWORD") -T4C_SERVER_HOST = get_config("T4C_SERVER", "HOST") -T4C_SERVER_PORT = get_config("T4C_SERVER", "PORT") -T4C_LICENCE = get_config("T4C_SERVER", "LICENCE") + def __init__(self, path: list): + self.path = path -T4C_USAGE_API = get_config("T4C_SERVER", "USAGE_API") -T4C_REST_API = get_config("T4C_SERVER", "REST_API") + def __getitem__(self, __k: str) -> "ConfigDict" | "ConfigList" | float | int | str: + # Read environment variable + env_key = "_".join([i.upper() for i in self.path + [__k]]) + env_value = os.environ.get(env_key) -KUBERNETES_CONTEXT = get_config("KUBERNETES", "CONTEXT", "default") -KUBERNETES_NAMESPACE = get_config("KUBERNETES", "NAMESPACE") -KUBERNETES_STORAGE_CLASS_NAME = get_config( - "KUBERNETES", "STORAGE_CLASS_NAME", "persistent-sessions-csi" -) -KUBERNETES_STORAGE_ACCESS_MODE = get_config( - "KUBERNETES", "STORAGE_ACCESS_MODE", "ReadWriteMany" -) -KUBERNETES_TOKEN = get_config("KUBERNETES", "NAMESPACE") -KUBERNETES_API_URL = get_config("KUBERNETES", "API_URL") -KUBERNETES_RELEASE_NAME = get_config("KUBERNETES", "RELEASE_NAME") -OPERATOR_TYPE = get_config("OPERATOR", "TYPE") + # Read yaml + yaml_key = ".".join([i for i in self.path + [__k]]) + yaml_value = self.get(__k) + value = yaml_value -JENKINS_BASE_URL = get_config("JENKINS", "BASE_URL") -JENKINS_USERNAME = get_config("JENKINS", "USERNAME") -JENKINS_PASSWORD = get_config("JENKINS", "PASSWORD") + # TODO: Implement default values / fallback -JENKINS_GIT_USERNAME = get_config("JENKINS_GIT", "USERNAME") -JENKINS_GIT_EMAIL = get_config("JENKINS_GIT", "EMAIL") -JENKINS_GIT_CREDENTIAL_ID = get_config("JENKINS_GIT", "CREDENTIAL_ID") -JENKINS_GIT_SCRIPT_REPO_URL = get_config("JENKINS_GIT", "SCRIPT_REPO_URL") + if yaml_value and env_value: + log.warning("Clashing environment variables. Found environment variable %s and yaml variable %s", env_key, env_value) + log.warning("Will use the yaml value, because it has a higher priority.") -GIT_USERNAME = get_config("GIT", "USERNAME") -GIT_PASSWORD = get_config("GIT", "PASSWORD") + value = yaml_value or env_value -INITIAL_ADMIN_USER = get_config("USERS", "INITIAL_ADMIN") + if isinstance(value, str | int | float): + return value + elif isinstance(value, dict): + return ConfigDict(self.path + [__k], value) + elif isinstance(value, list): + return ConfigList(self.path + [__k], value) + raise TypeError(f"Unspported type of value {type(value)}") + -REQUESTS_TIMEOUT = 1 -LOGGING_LEVEL = get_config("LOGGING", "LEVEL", "DEBUG") +class ConfigList(list): + def __getitem__(self, __i: t.SupportsIndex) -> "ConfigDict" | "ConfigList" | float | int | str: + \ No newline at end of file From 024d433045ce1f7d734604a39e2ad8e9914cc0cf Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 28 Mar 2022 12:48:34 +0200 Subject: [PATCH 004/143] Add custom ConfigDict and ConfigList to handle configuration variables --- backend/t4cclient/config.py | 114 +++++++++++++++++++++++++++++------- 1 file changed, 94 insertions(+), 20 deletions(-) diff --git a/backend/t4cclient/config.py b/backend/t4cclient/config.py index f5415f5de..055916eb8 100644 --- a/backend/t4cclient/config.py +++ b/backend/t4cclient/config.py @@ -1,47 +1,121 @@ -import abc +from __future__ import annotations + import logging import os import typing as t import yaml -_KT = t.TypeVar("_KT") - log = logging.getLogger(__name__) + class ConfigDict(dict): - path = [] + path: list[str | int] - def __init__(self, path: list): + def __init__(self, value: dict, path: list = []) -> None: + super().__init__(value) self.path = path def __getitem__(self, __k: str) -> "ConfigDict" | "ConfigList" | float | int | str: # Read environment variable env_key = "_".join([i.upper() for i in self.path + [__k]]) - env_value = os.environ.get(env_key) + env_value = os.environ.get(env_key, "") - # Read yaml + # Read dict yaml_key = ".".join([i for i in self.path + [__k]]) - yaml_value = self.get(__k) + yaml_value = super().get(__k) value = yaml_value # TODO: Implement default values / fallback - if yaml_value and env_value: - log.warning("Clashing environment variables. Found environment variable %s and yaml variable %s", env_key, env_value) + if yaml_value and env_value: + log.warning( + "Clashing environment variables. Found environment variable %s and yaml variable %s", + env_key, + yaml_key, + ) log.warning("Will use the yaml value, because it has a higher priority.") value = yaml_value or env_value - if isinstance(value, str | int | float): - return value - elif isinstance(value, dict): - return ConfigDict(self.path + [__k], value) + if not value: + return ConfigDict({}, self.path + [__k]) + if isinstance(value, (str, int, float)): + return value + elif isinstance(value, dict): + return ConfigDict(value, self.path + [__k]) + elif isinstance(value, list): + return ConfigList(value, self.path + [__k]) + + raise TypeError(f"Unspported type of value {type(value)}") + + def _immutable(self, *args, **kws): + raise TypeError("ConfigDict is immutable") + + def _unsupported(self, *args, **kws): + raise NotImplementedError("This function is not supported") + + __setitem__ = _immutable + __delitem__ = _immutable + pop = _immutable + popitem = _immutable + update = _immutable + clear = _immutable + setdefault = _immutable + + __lt__ = _unsupported + __le__ = _unsupported + __ne__ = _unsupported + __eq__ = _unsupported + __gt__ = _unsupported + __ge__ = _unsupported + + +class ConfigList(list): + path: list[str | int] + + def __init__(self, value: dict, path: list = []) -> None: + super().__init__(value) + self.path = path + + def __getitem__( + self, __i: t.SupportsIndex + ) -> "ConfigDict" | "ConfigList" | float | int | str: + # Read dict + value = super().__getitem__(__i) + + if isinstance(value, (str, int, float)): + return value + elif isinstance(value, dict): + return ConfigDict(value, self.path + [f"[{__i}]"]) elif isinstance(value, list): - return ConfigList(self.path + [__k], value) - raise TypeError(f"Unspported type of value {type(value)}") - + return ConfigList(value, self.path + [f"[{__i}]"]) + raise TypeError(f"Unspported type of value {type(value)}") + + def _immutable(self, *args, **kws): + raise TypeError("ConfigList is immutable") + + def _unsupported(self, *args, **kws): + raise NotImplementedError("This function is not supported") + + __setitem__ = _immutable + __delitem__ = _immutable + clear = _immutable + append = _immutable + insert = _immutable + extend = _immutable + pop = _immutable + remove = _immutable + sort = _immutable -class ConfigList(list): - def __getitem__(self, __i: t.SupportsIndex) -> "ConfigDict" | "ConfigList" | float | int | str: - \ No newline at end of file + __lt__ = _unsupported + __le__ = _unsupported + __ne__ = _unsupported + __eq__ = _unsupported + __gt__ = _unsupported + __ge__ = _unsupported + __add__ = _unsupported + __mul__ = _unsupported + __rmul__ = _unsupported + __iadd__ = _unsupported + __imul__ = _unsupported From 5ab56e1fe51f1f69b14df26487762203778408bb Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 28 Mar 2022 12:49:07 +0200 Subject: [PATCH 005/143] Add test for configuration variable loading --- backend/tests/data/example_config.yaml | 7 ++++++ backend/tests/test_config.py | 31 ++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 backend/tests/data/example_config.yaml create mode 100644 backend/tests/test_config.py diff --git a/backend/tests/data/example_config.yaml b/backend/tests/data/example_config.yaml new file mode 100644 index 000000000..2cd9b2946 --- /dev/null +++ b/backend/tests/data/example_config.yaml @@ -0,0 +1,7 @@ +example: + example2: yaml + example4: works + example3: + - test: + test2: test3 + - test2 \ No newline at end of file diff --git a/backend/tests/test_config.py b/backend/tests/test_config.py new file mode 100644 index 000000000..270da98df --- /dev/null +++ b/backend/tests/test_config.py @@ -0,0 +1,31 @@ +import os +import pathlib + +import yaml +from pydantic import create_model_from_typeddict +from t4cclient import config + + +def test_config_loading(): + os.environ["ENV1_ENV2"] = "testvalue" + os.environ["EXAMPLE_EXAMPLE2"] = "env" + yaml_dict = yaml.safe_load( + (pathlib.Path(__file__).parent / "data" / "example_config.yaml").open() + ) + + cfdict = config.ConfigDict(yaml_dict) + + # Environment variable + assert cfdict["env1"]["env2"] == "testvalue" + + # YAML has priority over environment variable + assert cfdict["example"]["example2"] == "yaml" + + # YAML variable + assert cfdict["example"]["example4"] == "works" + + # YAML list variable + assert cfdict["example"]["example3"][0]["test"]["test2"] == "test3" + + # YAML list variable + assert cfdict["example"]["example3"][-1] == "test2" From afb7cede3d3438aa6aca777f9fdbdb47fe1599f2 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 28 Mar 2022 12:49:34 +0200 Subject: [PATCH 006/143] Move content from __main__.py to __init__.py --- backend/t4cclient/__init__.py | 94 +++++++++++++++++------------------ backend/t4cclient/__main__.py | 5 -- 2 files changed, 46 insertions(+), 53 deletions(-) delete mode 100644 backend/t4cclient/__main__.py diff --git a/backend/t4cclient/__init__.py b/backend/t4cclient/__init__.py index 78571a6c4..9b5756199 100644 --- a/backend/t4cclient/__init__.py +++ b/backend/t4cclient/__init__.py @@ -4,70 +4,68 @@ import time from importlib import metadata +import uvicorn from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware -# This import statement is required and should not be removed! (Alembic will not work otherwise) -import t4cclient.sql_models -from t4cclient import config -from t4cclient.core.database import __main__ as database -from t4cclient.routes import router, status - logging.basicConfig(level=logging.INFO) log = logging.getLogger(__name__) -# Load extension models -eps = ( - metadata.entry_points()["capellacollab.extensions.backups"] - + metadata.entry_points()["capellacollab.extensions.modelsources"] -) -for ep in eps: - log.info("Import models of extension %s", ep.name) - ep.load().models - -database.migrate_db() - - -class HealthcheckFilter(logging.Filter): - def filter(self, record: logging.LogRecord) -> bool: - return record.getMessage().find("/healthcheck") == -1 +if __name__ == "__main__": + # This import statement is required and should not be removed! (Alembic will not work otherwise) + from t4cclient import config + from t4cclient.core.database import __main__ as database + from t4cclient.routes import router, status + # Load extension models + eps = ( + metadata.entry_points()["capellacollab.extensions.backups"] + + metadata.entry_points()["capellacollab.extensions.modelsources"] + ) + for ep in eps: + log.info("Import models of extension %s", ep.name) + ep.load().models -logging.getLogger("uvicorn.access").addFilter(HealthcheckFilter()) -logging.basicConfig(level=config.LOGGING_LEVEL) + database.migrate_db() -app = FastAPI(title="T4C Client Manager") + class HealthcheckFilter(logging.Filter): + def filter(self, record: logging.LogRecord) -> bool: + return record.getMessage().find("/healthcheck") == -1 -app.add_middleware( - CORSMiddleware, - allow_origins=["*"], - allow_credentials=True, - allow_methods=["POST", "GET", "OPTIONS", "DELETE", "PUT", "PATCH"], - allow_headers=["*"], -) + logging.getLogger("uvicorn.access").addFilter(HealthcheckFilter()) + logging.basicConfig(level=config.LOGGING_LEVEL) + app = FastAPI(title="Capella Collaboration") -@app.middleware("http") -async def log_requests(request, call_next): - idem = "".join(random.choices(string.ascii_uppercase + string.digits, k=6)) - log.debug(f"rid={idem} start request path={request.url.path}") - start_time = time.time() + app.add_middleware( + CORSMiddleware, + allow_origins=["*"], + allow_credentials=True, + allow_methods=["POST", "GET", "OPTIONS", "DELETE", "PUT", "PATCH"], + allow_headers=["*"], + ) - response = await call_next(request) + @app.middleware("http") + async def log_requests(request, call_next): + idem = "".join(random.choices(string.ascii_uppercase + string.digits, k=6)) + log.debug(f"rid={idem} start request path={request.url.path}") + start_time = time.time() - process_time = (time.time() - start_time) * 1000 - formatted_process_time = "{0:.2f}".format(process_time) - log.debug( - f"rid={idem} completed_in={formatted_process_time}ms status_code={response.status_code}" - ) + response = await call_next(request) - return response + process_time = (time.time() - start_time) * 1000 + formatted_process_time = "{0:.2f}".format(process_time) + log.debug( + f"rid={idem} completed_in={formatted_process_time}ms status_code={response.status_code}" + ) + return response -@app.get("/healthcheck", tags=["Healthcheck"]) -async def healthcheck(): - return {"status": "alive"} + @app.get("/healthcheck", tags=["Healthcheck"]) + async def healthcheck(): + return {"status": "alive"} + app.include_router(status.router, prefix="", tags=["Status"]) + app.include_router(router, prefix="/api/v1") -app.include_router(status.router, prefix="", tags=["Status"]) -app.include_router(router, prefix="/api/v1") + uvicorn.run(app) diff --git a/backend/t4cclient/__main__.py b/backend/t4cclient/__main__.py deleted file mode 100644 index 9446cdc22..000000000 --- a/backend/t4cclient/__main__.py +++ /dev/null @@ -1,5 +0,0 @@ -import uvicorn -from t4cclient import app - -if __name__ == "__main__": - uvicorn.run(app) \ No newline at end of file From 29efa93a28a212936210765189f74e370630b5f0 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 28 Mar 2022 13:01:28 +0200 Subject: [PATCH 007/143] Add locations for configuration --- backend/setup.cfg | 1 + backend/t4cclient/config.py | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/backend/setup.cfg b/backend/setup.cfg index 26d049226..5abbcbc63 100644 --- a/backend/setup.cfg +++ b/backend/setup.cfg @@ -22,6 +22,7 @@ install_requires = cachetools uvicorn[standard] PyYAML + appdirs [options.entry_points] capellacollab.extensions.backups = diff --git a/backend/t4cclient/config.py b/backend/t4cclient/config.py index 055916eb8..6c7965ae7 100644 --- a/backend/t4cclient/config.py +++ b/backend/t4cclient/config.py @@ -2,8 +2,10 @@ import logging import os +import pathlib import typing as t +import appdirs import yaml log = logging.getLogger(__name__) @@ -119,3 +121,20 @@ def _unsupported(self, *args, **kws): __rmul__ = _unsupported __iadd__ = _unsupported __imul__ = _unsupported + + +config = ConfigDict({}) + +locations: list[pathlib.Path] = [ + pathlib.Path(__file__).parents[1] / "config" / "config.yaml", + pathlib.Path(appdirs.user_config_dir("capellacollab", "db")) / "config.yaml", +] + +log.debug("Searching for configuration files...") +for l in locations: + log.debug("Looking at location %s", str(l)) + if l.exists(): + config = ConfigDict(yaml.safe_load(l.open())) + break +else: + log.info("Found no configuration file. Only environment variables will be used.") From d110a760fea48f2c985b0f4b87844ade0ec6c2eb Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Thu, 31 Mar 2022 12:47:58 +0200 Subject: [PATCH 008/143] Switch to yaml/dictionary based configuration --- backend/t4cclient/alembic/env.py | 4 +-- backend/t4cclient/core/database/__init__.py | 4 +-- backend/t4cclient/core/database/__main__.py | 15 +++++---- backend/t4cclient/core/operators/k8s.py | 33 ++++++++++++------- .../extensions/backups/jenkins/__init__.py | 15 +++++---- backend/t4cclient/extensions/guacamole.py | 20 +++++------ .../extensions/modelsources/t4c/connection.py | 9 +++-- backend/t4cclient/routes/guacamole.py | 8 +++-- 8 files changed, 61 insertions(+), 47 deletions(-) diff --git a/backend/t4cclient/alembic/env.py b/backend/t4cclient/alembic/env.py index 2de4b8659..96343033f 100644 --- a/backend/t4cclient/alembic/env.py +++ b/backend/t4cclient/alembic/env.py @@ -4,7 +4,7 @@ os.environ["ALEMBIC_CONTEXT"] = "1" from sqlalchemy import engine_from_config, pool -from t4cclient.config import DATABASE_URL +from t4cclient.config import config as cfg from alembic import context @@ -14,7 +14,7 @@ # this will overwrite the ini-file sqlalchemy.url path # with the path given in the config of the main code -config.set_main_option("sqlalchemy.url", DATABASE_URL) +config.set_main_option("sqlalchemy.url", cfg["database"]["url"]) # Interpret the config file for Python logging. diff --git a/backend/t4cclient/core/database/__init__.py b/backend/t4cclient/core/database/__init__.py index a2f8742e6..1324e9e2b 100644 --- a/backend/t4cclient/core/database/__init__.py +++ b/backend/t4cclient/core/database/__init__.py @@ -1,9 +1,9 @@ from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker -from t4cclient import config +from t4cclient.config import config -engine = create_engine(config.DATABASE_URL) +engine = create_engine(config["database"]["url"]) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) Base = declarative_base() diff --git a/backend/t4cclient/core/database/__main__.py b/backend/t4cclient/core/database/__main__.py index 8f1bd5c40..a4f56efed 100644 --- a/backend/t4cclient/core/database/__main__.py +++ b/backend/t4cclient/core/database/__main__.py @@ -7,14 +7,15 @@ from alembic.migration import MigrationContext from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker -from t4cclient import config +from t4cclient.config import config from t4cclient.core.database import Base, repositories, users from t4cclient.schemas.repositories.users import Role -engine = create_engine(config.DATABASE_URL) +DATABASE_URL = config["database"]["url"] +engine = create_engine(DATABASE_URL) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) -LOGGER = logging.getLogger(__file__) +LOGGER = logging.getLogger(__name__) def migrate_db(): @@ -24,10 +25,10 @@ def migrate_db(): # Get current revision of Database. If no revision is available, initialize the database. alembic_cfg = Config(root_dir / "alembic.ini") alembic_cfg.set_main_option("script_location", str(root_dir / "alembic")) - alembic_cfg.set_main_option("sqlalchemy.url", config.DATABASE_URL) + alembic_cfg.set_main_option("sqlalchemy.url", DATABASE_URL) alembic_cfg.attributes["configure_logger"] = False - engine = create_engine(config.DATABASE_URL) + engine = create_engine(DATABASE_URL) conn = engine.connect() context = MigrationContext.configure(conn) @@ -46,9 +47,9 @@ def migrate_db(): def initialize_admin_user(): - LOGGER.info("Initialized adminuser " + config.INITIAL_ADMIN_USER) + LOGGER.info("Initialized adminuser " + config["initial"]["admin"]) with SessionLocal() as db: - users.create_user(db=db, username=config.INITIAL_ADMIN_USER, role=Role.ADMIN) + users.create_user(db=db, username=config["initial"]["admin"], role=Role.ADMIN) def initialize_default_repository(): diff --git a/backend/t4cclient/core/operators/k8s.py b/backend/t4cclient/core/operators/k8s.py index c2e10dc0c..c0ae01a29 100644 --- a/backend/t4cclient/core/operators/k8s.py +++ b/backend/t4cclient/core/operators/k8s.py @@ -10,16 +10,17 @@ import kubernetes.client.exceptions import kubernetes.client.models import kubernetes.config -from t4cclient import config +from t4cclient.config import config from t4cclient.core.operators.abc import Operator log = logging.getLogger(__name__) +cfg = config["operators"]["k8s"] try: kubernetes.config.load_incluster_config() except kubernetes.config.ConfigException: try: - kubernetes.config.load_config(context=config.KUBERNETES_CONTEXT) + kubernetes.config.load_config(context=cfg["context"]) except kubernetes.config.ConfigException: kubernetes.config.load_kube_config_from_dict( { @@ -29,7 +30,7 @@ { "cluster": { "insecure-skip-tls-verify": True, - "server": config.KUBERNETES_API_URL, + "server": cfg["apiURL"], }, "name": "cluster", } @@ -44,7 +45,7 @@ "users": [ { "name": "tokenuser", - "user": {"token": config.KUBERNETES_TOKEN}, + "user": {"token": cfg["token"]}, } ], } @@ -71,16 +72,17 @@ def start_persistent_session( repositories: t.List[str], ) -> t.Dict[str, t.Any]: log.info("Launching a persistent session for user %s", username) + t4c_cfg = config["modelsources"]["t4c"] id = self._generate_id() self._create_persistent_volume_claim(username) deployment = self._create_deployment( - config.PERSISTENT_IMAGE, + config["docker"]["images"]["workspaces"]["persistent"], id, { - "T4C_LICENCE_SECRET": config.T4C_LICENCE, - "T4C_SERVER_HOST": config.T4C_SERVER_HOST, - "T4C_SERVER_PORT": config.T4C_SERVER_PORT, + "T4C_LICENCE_SECRET": t4c_cfg["licence"], + "T4C_SERVER_HOST": t4c_cfg["host"], + "T4C_SERVER_PORT": t4c_cfg["port"], "T4C_REPOSITORIES": ",".join(repositories), "RMT_PASSWORD": password, }, @@ -92,15 +94,22 @@ def start_persistent_session( return self._export_attrs(deployment, service) def start_readonly_session( - self, password: str, git_url: str, git_revision: str, entrypoint: str + self, + password: str, + git_url: str, + git_revision: str, + entrypoint: str, + git_username: str, + git_password: str, ) -> t.Dict[str, t.Any]: id = self._generate_id() + deployment = self._create_deployment( - config.READONLY_IMAGE, + config["docker"]["images"]["workspaces"]["readonly"], id, { - "GIT_USERNAME": config.GIT_USERNAME, - "GIT_PASSWORD": config.GIT_PASSWORD, + "GIT_USERNAME": git_username, + "GIT_PASSWORD": git_password, "GIT_URL": git_url, "GIT_REVISION": git_revision, "GIT_ENTRYPOINT": entrypoint, diff --git a/backend/t4cclient/extensions/backups/jenkins/__init__.py b/backend/t4cclient/extensions/backups/jenkins/__init__.py index 71840674d..7be20afa9 100644 --- a/backend/t4cclient/extensions/backups/jenkins/__init__.py +++ b/backend/t4cclient/extensions/backups/jenkins/__init__.py @@ -8,11 +8,12 @@ import t4cclient.extensions.backups.jenkins as crud_jenkins import t4cclient.extensions.modelsources.git.crud as crud_git_models import t4cclient.extensions.modelsources.git.models as database_git_models -from t4cclient import config +from t4cclient.config import config from . import crud, models, routes -JENKINS_AUTH = (config.JENKINS_USERNAME, config.JENKINS_PASSWORD) +cfg = config["backups"]["jenkins"] +JENKINS_AUTH = (cfg["username"], cfg["password"]) def load_pipeline_config(git_model: database_git_models.DB_GitModel): @@ -21,11 +22,11 @@ def load_pipeline_config(git_model: database_git_models.DB_GitModel): "T4C_REPO_NAME": git_model.repository_name, "MODEL_ENTRYPOINT": git_model.entrypoint, "GIT_BRANCH": git_model.revision, - "GIT_CREDENTIAL_ID": config.JENKINS_GIT_CREDENTIAL_ID, - "GIT_USERNAME": config.JENKINS_GIT_USERNAME, - "GIT_EMAIL": config.JENKINS_GIT_EMAIL, + "GIT_CREDENTIAL_ID": cfg["git"]["credentialID"], + "GIT_USERNAME": git_model.username, + "GIT_EMAIL": cfg["git"]["email"], "GIT_MODEL_URL": git_model.path, - "JENKINS_SCRIPT_REPO_URL": config.JENKINS_GIT_SCRIPT_REPO_URL, + "JENKINS_SCRIPT_REPO_URL": cfg["git"]["scriptRepoURL"], "GIT_URL_WITH_CREDENTIALS_ENV": git_model.path.replace("//", "//$USER:$PASS@"), } filecontent = (pathlib.Path(__file__).parent / "config.xml").read_text() @@ -39,7 +40,7 @@ def load_pipeline_config(git_model: database_git_models.DB_GitModel): def post_pipelines_to_jenkins(filecontent: str, pipeline_name: str): res = requests.post( - config.JENKINS_BASE_URL + "/createItem?name=" + pipeline_name, + cfg["baseURL"] + "/createItem?name=" + pipeline_name, data=filecontent, auth=JENKINS_AUTH, headers={ diff --git a/backend/t4cclient/extensions/guacamole.py b/backend/t4cclient/extensions/guacamole.py index 8039ce17b..cebd96f0b 100644 --- a/backend/t4cclient/extensions/guacamole.py +++ b/backend/t4cclient/extensions/guacamole.py @@ -2,17 +2,17 @@ import requests from requests.auth import HTTPBasicAuth -from t4cclient import config -from t4cclient.config import GUACAMOLE_URI +from t4cclient.config import config from t4cclient.core.credentials import generate_password -GUACAMOLE_PREFIX = GUACAMOLE_URI + "/api/session/data/postgresql" +cfg = config["extensions"]["guacamole"] +GUACAMOLE_PREFIX = cfg["baseURI"] + "/api/session/data/postgresql" headers = {"Content-Type": "application/x-www-form-urlencoded"} def get_admin_token() -> str: r = requests.post( - GUACAMOLE_URI + "/api/tokens", + cfg["baseURI"] + "/api/tokens", auth=HTTPBasicAuth(config.GUACAMOLE_USERNAME, config.GUACAMOLE_PASSWORD), headers=headers, timeout=config.REQUESTS_TIMEOUT, @@ -23,7 +23,7 @@ def get_admin_token() -> str: def get_token(username: str, password: str) -> str: r = requests.post( - GUACAMOLE_URI + "/api/tokens", + cfg["baseURI"] + "/api/tokens", auth=HTTPBasicAuth(username, password), headers=headers, timeout=config.REQUESTS_TIMEOUT, @@ -40,7 +40,7 @@ def create_user( r = requests.post( GUACAMOLE_PREFIX + "/users?token=" + token, json={"username": username, "password": password, "attributes": {}}, - timeout=config.REQUESTS_TIMEOUT, + timeout=config["requests"]["timeout"], ) r.raise_for_status() return r.json() @@ -56,7 +56,7 @@ def assign_user_to_connection(token: str, username: str, connection_id: str): "value": "READ", } ], - timeout=config.REQUESTS_TIMEOUT, + timeout=config["requests"]["timeout"], ) r.raise_for_status() @@ -64,7 +64,7 @@ def assign_user_to_connection(token: str, username: str, connection_id: str): def delete_user(token: str, username: str): r = requests.delete( f"{GUACAMOLE_PREFIX}/users/{username}?token={token}", - timeout=config.REQUESTS_TIMEOUT, + timeout=config["requests"]["timeout"], ) r.raise_for_status() return r.json() @@ -73,7 +73,7 @@ def delete_user(token: str, username: str): def delete_connection(token: str, connection_name: str): r = requests.delete( f"{GUACAMOLE_PREFIX}/connections/{connection_name}?token={token}", - timeout=config.REQUESTS_TIMEOUT, + timeout=config["requests"]["timeout"], ) r.raise_for_status() return r.json() @@ -101,7 +101,7 @@ def create_connection( }, "attributes": {}, }, - timeout=config.REQUESTS_TIMEOUT, + timeout=config["requests"]["timeout"], ) r.raise_for_status() diff --git a/backend/t4cclient/extensions/modelsources/t4c/connection.py b/backend/t4cclient/extensions/modelsources/t4c/connection.py index 1ccb0a5d3..f6ca0e848 100644 --- a/backend/t4cclient/extensions/modelsources/t4c/connection.py +++ b/backend/t4cclient/extensions/modelsources/t4c/connection.py @@ -5,14 +5,13 @@ import requests from requests.auth import HTTPBasicAuth -from t4cclient import config +from t4cclient.config import config from t4cclient.core.credentials import generate_password log = logging.getLogger(__name__) +cfg = config["modelsources"]["t4c"] -T4C_BACKEND_AUTHENTICATION = HTTPBasicAuth( - config.T4C_SERVER_USERNAME, config.T4C_SERVER_PASSWORD -) +T4C_BACKEND_AUTHENTICATION = HTTPBasicAuth(cfg["username"], cfg["password"]) def get_t4c_status(): @@ -21,7 +20,7 @@ def get_t4c_status(): r = requests.get( config.T4C_USAGE_API + "/status/json", auth=T4C_BACKEND_AUTHENTICATION, - timeout=config.REQUESTS_TIMEOUT, + timeout=config["requests"]["timeout"], ) except requests.exceptions.Timeout: log.info("License server timeout", exc_info=True) diff --git a/backend/t4cclient/routes/guacamole.py b/backend/t4cclient/routes/guacamole.py index 4da42384a..4458194ea 100644 --- a/backend/t4cclient/routes/guacamole.py +++ b/backend/t4cclient/routes/guacamole.py @@ -2,7 +2,8 @@ from fastapi import APIRouter, Depends, HTTPException from requests import Session -from t4cclient.config import GUACAMOLE_PUBLIC_URI, USERNAME_CLAIM +from t4cclient.config import config +from t4cclient.core.authentication.helper import get_username from t4cclient.core.authentication.jwt_bearer import JWTBearer from t4cclient.core.database import get_db, sessions from t4cclient.extensions import guacamole @@ -30,4 +31,7 @@ def create_guacamole_token( ) token = guacamole.get_token(session.guacamole_username, session.guacamole_password) - return GuacamoleAuthentication(token=json.dumps(token), url=GUACAMOLE_PUBLIC_URI + "/#/") + return GuacamoleAuthentication( + token=json.dumps(token), + url=config["extensions"]["guacamole"]["publicURI"] + "/#/", + ) From 969fd00cf744de20368f39a03aec2d4e133f900f Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Thu, 31 Mar 2022 12:48:41 +0200 Subject: [PATCH 009/143] Add support for custom configuration providers, add oauth support --- .../t4cclient/core/authentication/__init__.py | 17 +++ .../core/authentication/database/__init__.py | 5 +- .../t4cclient/core/authentication/helper.py | 6 +- .../core/authentication/jwt_bearer.py | 117 ++---------------- .../authentication/provider/azure/__init__.py | 1 - .../authentication/provider/azure/__main__.py | 16 +++ .../authentication/provider/azure/keystore.py | 110 ++++++++++++++++ .../authentication/provider/azure/routes.py | 23 ++-- .../authentication/provider/oauth/__init__.py | 1 - .../authentication/provider/oauth/__main__.py | 11 ++ .../authentication/provider/oauth/flow.py | 24 ++-- .../authentication/provider/oauth/routes.py | 6 +- backend/t4cclient/routes/__init__.py | 26 ++-- 13 files changed, 214 insertions(+), 149 deletions(-) create mode 100644 backend/t4cclient/core/authentication/__init__.py create mode 100644 backend/t4cclient/core/authentication/provider/azure/__main__.py create mode 100644 backend/t4cclient/core/authentication/provider/azure/keystore.py create mode 100644 backend/t4cclient/core/authentication/provider/oauth/__main__.py diff --git a/backend/t4cclient/core/authentication/__init__.py b/backend/t4cclient/core/authentication/__init__.py new file mode 100644 index 000000000..113dd047f --- /dev/null +++ b/backend/t4cclient/core/authentication/__init__.py @@ -0,0 +1,17 @@ +from importlib import metadata + +from t4cclient.config import config + + +def get_authentication_entrypoint(): + try: + ep = next( + i + for i in metadata.entry_points()["capellacollab.authentication.providers"] + if i.name == config["authentication"]["provider"] + ) + return ep + except StopIteration: + raise ValueError( + "Unknown authentication provider " + config["authentication"]["provider"] + ) from None diff --git a/backend/t4cclient/core/authentication/database/__init__.py b/backend/t4cclient/core/authentication/database/__init__.py index f648aa3ee..c57b2c37b 100644 --- a/backend/t4cclient/core/authentication/database/__init__.py +++ b/backend/t4cclient/core/authentication/database/__init__.py @@ -1,12 +1,9 @@ from fastapi import Depends, HTTPException -from sqlalchemy import true -from t4cclient.config import USERNAME_CLAIM from t4cclient.core.authentication.helper import get_username from t4cclient.core.authentication.jwt_bearer import JWTBearer from t4cclient.core.database import get_db, repository_users from t4cclient.core.database.users import get_user -from t4cclient.schemas.repositories import (RepositoryUserPermission, - RepositoryUserRole) +from t4cclient.schemas.repositories import RepositoryUserPermission, RepositoryUserRole from t4cclient.schemas.repositories.users import Role diff --git a/backend/t4cclient/core/authentication/helper.py b/backend/t4cclient/core/authentication/helper.py index 33af5c101..128d51bf7 100644 --- a/backend/t4cclient/core/authentication/helper.py +++ b/backend/t4cclient/core/authentication/helper.py @@ -1,7 +1,7 @@ import typing as t -from t4cclient import config +from t4cclient.config import config -def get_username(token: t.Dict[str, t.Any]) -> str: - return token[config.USERNAME_CLAIM].strip() +def get_username(token: t.Dict[str, t.Any]) -> str: + return token[config["authentication"]["jwt"]["usernameClaim"]].strip() diff --git a/backend/t4cclient/core/authentication/jwt_bearer.py b/backend/t4cclient/core/authentication/jwt_bearer.py index 315f53551..99c114ff3 100644 --- a/backend/t4cclient/core/authentication/jwt_bearer.py +++ b/backend/t4cclient/core/authentication/jwt_bearer.py @@ -1,17 +1,18 @@ +import importlib import logging -import time import typing as t -import requests from fastapi import HTTPException, Request from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer from jose import jwt -from pydantic import BaseModel -from t4cclient import config -from t4cclient.config import OAUTH_CLIENT_ID, OAUTH_ENDPOINT, USERNAME_CLAIM +from t4cclient.core.authentication.helper import get_username from t4cclient.core.database import SessionLocal, users +from . import get_authentication_entrypoint + log = logging.getLogger(__name__) +ep = get_authentication_entrypoint() +ep_main = importlib.import_module(".__main__", ep.module) class JWTBearer(HTTPBearer): @@ -37,12 +38,12 @@ async def __call__(self, request: Request): def initialize_user(self, token_decoded: t.Dict[str, str]): with SessionLocal() as session: - users.find_or_create_user(session, token_decoded[USERNAME_CLAIM]) + users.find_or_create_user(session, get_username(token_decoded)) def validate_token(self, token: str) -> t.Dict[str, t.Any]: - key = KeyStore.key_for_token(token) + jwt_cfg = ep_main.get_jwk_cfg(token) try: - return jwt.decode(token, key.dict(), audience=OAUTH_CLIENT_ID) + return jwt.decode(token, **jwt_cfg) except jwt.ExpiredSignatureError: raise HTTPException( status_code=401, @@ -56,103 +57,3 @@ def validate_token(self, token: str) -> t.Dict[str, t.Any]: status_code=401, detail="The token verification failed. Please try again with another access token.", ) - - -# Copied and adapted from https://github.com/marpaia/jwks/blob/master/jwks/jwks.py: - - -class _KeyStore: - def __init__( - self, - *, - jwks_uri: str, - algorithms: t.List[str] = ["RS256"], - key_refresh_interval=3600, - ): - self.jwks_uri = jwks_uri - self.algorithms = algorithms - self.public_keys = {} - self.key_refresh_interval = key_refresh_interval - self.public_keys_last_refreshed = 0 - self.refresh_keys() - - def keys_need_refresh(self) -> bool: - return ( - time.time() - self.public_keys_last_refreshed - ) > self.key_refresh_interval - - def refresh_keys(self) -> None: - try: - resp = requests.get(self.jwks_uri, timeout=config.REQUESTS_TIMEOUT) - except Exception as e: - log.error("Could not retrieve JWKS data from %s", self.jwks_uri) - return - jwks = JSONWebKeySet.parse_raw(resp.text) - self.public_keys_last_refreshed = time.time() - self.public_keys.clear() - for key in jwks.keys: - self.public_keys[key.kid] = key - - def key_for_token(self, token: str, *, in_retry: int = 0) -> t.Dict[str, t.Any]: - # Before we do anything, the validation keys may need to be refreshed. - # If so, refresh them. - if self.keys_need_refresh(): - self.refresh_keys() - - # Try to extract the claims from the token so that we can use the key ID - # to determine which key we should use to validate the token. - try: - unverified_claims = jwt.get_unverified_header(token) - except Exception: - raise InvalidTokenError("Unable to parse key ID from token") - - # See if we have the key identified by this key ID. - try: - return self.public_keys[unverified_claims["kid"]] - except KeyError: - # If we don't have this key and this is the first attempt (ie: we - # haven't refreshed keys yet), then try to refresh the keys and try - # again. - if in_retry: - raise KeyIDNotFoundError() - self.refresh_keys() - return self.key_for_token(token, in_retry=1) - - -def get_jwks_uri_for_azure_ad(authorization_endpoint=OAUTH_ENDPOINT): - discoveryEndpoint = ( - f"{authorization_endpoint}/v2.0/.well-known/openid-configuration" - ) - - openid_config = requests.get( - discoveryEndpoint, - timeout=config.REQUESTS_TIMEOUT, - ).json() - return openid_config["jwks_uri"] - - -class JSONWebKey(BaseModel): - # alg: str - kty: str - use: str - n: str - e: str - kid: str - x5t: str - x5c: t.List[str] - - -class JSONWebKeySet(BaseModel): - keys: t.List[JSONWebKey] - - -class InvalidTokenError(Exception): - pass - - -class KeyIDNotFoundError(Exception): - pass - - -# Our "singleton" key store: -KeyStore = _KeyStore(jwks_uri=get_jwks_uri_for_azure_ad()) diff --git a/backend/t4cclient/core/authentication/provider/azure/__init__.py b/backend/t4cclient/core/authentication/provider/azure/__init__.py index e10a8668b..e69de29bb 100644 --- a/backend/t4cclient/core/authentication/provider/azure/__init__.py +++ b/backend/t4cclient/core/authentication/provider/azure/__init__.py @@ -1 +0,0 @@ -from . import routes \ No newline at end of file diff --git a/backend/t4cclient/core/authentication/provider/azure/__main__.py b/backend/t4cclient/core/authentication/provider/azure/__main__.py new file mode 100644 index 000000000..d2c678bd7 --- /dev/null +++ b/backend/t4cclient/core/authentication/provider/azure/__main__.py @@ -0,0 +1,16 @@ +from t4cclient.config import config + +from . import keystore + +# Our "singleton" key store: +KeyStore = keystore._KeyStore(jwks_uri=keystore.get_jwks_uri_for_azure_ad()) + + +cfg = config["authentication"]["azure"] + + +def get_jwk_cfg(token: str) -> dict[str, any]: + return { + "audience": cfg["client"]["id"], + "key": KeyStore.key_for_token(token).dict(), + } diff --git a/backend/t4cclient/core/authentication/provider/azure/keystore.py b/backend/t4cclient/core/authentication/provider/azure/keystore.py new file mode 100644 index 000000000..fb3b6edbd --- /dev/null +++ b/backend/t4cclient/core/authentication/provider/azure/keystore.py @@ -0,0 +1,110 @@ +import logging +import time +import typing as t + +import requests +from pydantic import BaseModel +from t4cclient.config import config + +log = logging.getLogger(__name__) +cfg = config["authentication"]["azure"] + + +# Copied and adapted from https://github.com/marpaia/jwks/blob/master/jwks/jwks.py: + + +class _KeyStore: + def __init__( + self, + *, + jwks_uri: str, + algorithms: t.List[str] = ["RS256"], + key_refresh_interval=3600, + ): + self.jwks_uri = jwks_uri + self.algorithms = algorithms + self.public_keys = {} + self.key_refresh_interval = key_refresh_interval + self.public_keys_last_refreshed = 0 + self.refresh_keys() + + def keys_need_refresh(self) -> bool: + return ( + time.time() - self.public_keys_last_refreshed + ) > self.key_refresh_interval + + def refresh_keys(self) -> None: + try: + resp = requests.get(self.jwks_uri, timeout=config["requests"]["timeout"]) + except Exception as e: + log.error("Could not retrieve JWKS data from %s", self.jwks_uri) + return + jwks = JSONWebKeySet.parse_raw(resp.text) + self.public_keys_last_refreshed = time.time() + self.public_keys.clear() + for key in jwks.keys: + self.public_keys[key.kid] = key + + def key_for_token(self, token: str, *, in_retry: int = 0) -> t.Dict[str, t.Any]: + # Before we do anything, the validation keys may need to be refreshed. + # If so, refresh them. + if self.keys_need_refresh(): + self.refresh_keys() + + # Try to extract the claims from the token so that we can use the key ID + # to determine which key we should use to validate the token. + try: + unverified_claims = jwt.get_unverified_header(token) + except Exception: + raise InvalidTokenError("Unable to parse key ID from token") + + # See if we have the key identified by this key ID. + try: + return self.public_keys[unverified_claims["kid"]] + except KeyError: + # If we don't have this key and this is the first attempt (ie: we + # haven't refreshed keys yet), then try to refresh the keys and try + # again. + if in_retry: + raise KeyIDNotFoundError() + self.refresh_keys() + return self.key_for_token(token, in_retry=1) + + +def get_jwks_uri_for_azure_ad(authorization_endpoint=cfg["authorizationEndpoint"]): + discoveryEndpoint = ( + f"{authorization_endpoint}/v2.0/.well-known/openid-configuration" + ) + + openid_config = requests.get( + discoveryEndpoint, + timeout=config["requests"]["timeout"], + ).json() + return openid_config["jwks_uri"] + + +class JSONWebKey(BaseModel): + # alg: str + kty: str + use: str + n: str + e: str + kid: str + x5t: str + x5c: t.List[str] + + +class JSONWebKeySet(BaseModel): + keys: t.List[JSONWebKey] + + +class InvalidTokenError(Exception): + pass + + +class KeyIDNotFoundError(Exception): + pass + + +# Our "singleton" key store: +KeyStore = _KeyStore(jwks_uri=get_jwks_uri_for_azure_ad()) diff --git a/backend/t4cclient/core/authentication/provider/azure/routes.py b/backend/t4cclient/core/authentication/provider/azure/routes.py index e0c02deb9..b366b3017 100644 --- a/backend/t4cclient/core/authentication/provider/azure/routes.py +++ b/backend/t4cclient/core/authentication/provider/azure/routes.py @@ -5,18 +5,21 @@ from cachetools import TTLCache from fastapi import APIRouter, Depends from msal import ConfidentialClientApplication -from t4cclient.config import (OAUTH_CLIENT_ID, OAUTH_CLIENT_SECRET, - OAUTH_ENDPOINT) +from t4cclient.config import config from t4cclient.core.authentication import jwt_bearer -from t4cclient.core.authentication.schemas import (RefreshTokenRequest, - TokenRequest) +from t4cclient.core.authentication.schemas import RefreshTokenRequest, TokenRequest router = APIRouter() +cfg = config["authentication"]["azure"] @lru_cache() def ad_session(): - return ConfidentialClientApplication(OAUTH_CLIENT_ID, client_credential=OAUTH_CLIENT_SECRET, authority=OAUTH_ENDPOINT) + return ConfidentialClientApplication( + cfg["client"]["id"], + client_credential=cfg["client"]["secret"], + authority=cfg["connectConfigurationEndpoint"], + ) # Make this a cache: @@ -36,11 +39,17 @@ async def get_redirect_url(): async def api_get_token(body: TokenRequest): auth_data = global_session_data[body.state] del global_session_data[body.state] - token = ad_session().acquire_token_by_auth_code_flow(auth_data, body.dict(), scopes=[]) + token = ad_session().acquire_token_by_auth_code_flow( + auth_data, body.dict(), scopes=[] + ) # *Sigh* This is microsoft again. Instead of the access_token, we should use id_token :/ # https://stackoverflow.com/questions/63195081/how-to-validate-a-jwt-from-azuread-in-python - return {"access_token": token["id_token"], "refresh_token": token["refresh_token"], "token_type": token["token_type"]} + return { + "access_token": token["id_token"], + "refresh_token": token["refresh_token"], + "token_type": token["token_type"], + } @router.put("/tokens", name="Refresh the access_token") diff --git a/backend/t4cclient/core/authentication/provider/oauth/__init__.py b/backend/t4cclient/core/authentication/provider/oauth/__init__.py index e10a8668b..e69de29bb 100644 --- a/backend/t4cclient/core/authentication/provider/oauth/__init__.py +++ b/backend/t4cclient/core/authentication/provider/oauth/__init__.py @@ -1 +0,0 @@ -from . import routes \ No newline at end of file diff --git a/backend/t4cclient/core/authentication/provider/oauth/__main__.py b/backend/t4cclient/core/authentication/provider/oauth/__main__.py new file mode 100644 index 000000000..33e6fe491 --- /dev/null +++ b/backend/t4cclient/core/authentication/provider/oauth/__main__.py @@ -0,0 +1,11 @@ +from t4cclient.config import config + +cfg = config["authentication"]["oauth"] + + +def get_jwk_cfg(token: str) -> dict[str, any]: + return { + "algorithms": ["RS256"], + "audience": cfg["client"]["id"], + "key": cfg["publicKey"], + } diff --git a/backend/t4cclient/core/authentication/provider/oauth/flow.py b/backend/t4cclient/core/authentication/provider/oauth/flow.py index 56e45f5eb..c2e36f57c 100644 --- a/backend/t4cclient/core/authentication/provider/oauth/flow.py +++ b/backend/t4cclient/core/authentication/provider/oauth/flow.py @@ -1,32 +1,34 @@ import typing as t from requests_oauthlib import OAuth2Session -from t4cclient.config import (OAUTH_CLIENT_ID, OAUTH_CLIENT_SECRET, - OAUTH_ENDPOINT, OAUTH_REDIRECT_URI, - OAUTH_TOKEN_ENDPOINT) +from t4cclient.config import config -auth_session = OAuth2Session(OAUTH_CLIENT_ID, redirect_uri=OAUTH_REDIRECT_URI) +cfg = config["authentication"]["oauth"] + +auth_session = OAuth2Session(cfg["client"]["id"], redirect_uri=cfg["redirectURI"]) def get_auth_redirect_url() -> t.Dict[str, str]: auth_url, state = auth_session.authorization_url( - OAUTH_ENDPOINT + "/authorize", grant_type="authorization_code" + cfg["endpoints"]["authorization"], + grant_type="authorization_code", ) return {"auth_url": auth_url, "state": state} def get_token(code: str) -> t.Dict[str, t.Any]: return auth_session.fetch_token( - OAUTH_TOKEN_ENDPOINT, + cfg["endpoints"]["tokenIssuance"], code=code, - client_id=OAUTH_CLIENT_ID, - client_secret=OAUTH_CLIENT_SECRET, + client_id=cfg["client"]["id"], + client_secret=cfg["client"]["secret"], ) + def refresh_token(refresh_token: str) -> t.Dict[str, t.Any]: return auth_session.refresh_token( - OAUTH_TOKEN_ENDPOINT, + cfg["endpoints"]["tokenIssuance"], refresh_token=refresh_token, - client_id=OAUTH_CLIENT_ID, - client_secret=OAUTH_CLIENT_SECRET, + client_id=cfg["client"]["id"], + client_secret=cfg["client"]["secret"], ) diff --git a/backend/t4cclient/core/authentication/provider/oauth/routes.py b/backend/t4cclient/core/authentication/provider/oauth/routes.py index 09311390e..a4eb21f6a 100644 --- a/backend/t4cclient/core/authentication/provider/oauth/routes.py +++ b/backend/t4cclient/core/authentication/provider/oauth/routes.py @@ -1,12 +1,12 @@ from fastapi import APIRouter, Depends from t4cclient.core.authentication import jwt_bearer -from t4cclient.core.authentication.schemas import (RefreshTokenRequest, - TokenRequest) +from t4cclient.core.authentication.schemas import RefreshTokenRequest, TokenRequest from .flow import get_auth_redirect_url, get_token, refresh_token router = APIRouter() + @router.get("/", name="Get redirect URL for OAuth") async def get_redirect_url(): return get_auth_redirect_url() @@ -21,10 +21,12 @@ async def api_get_token(body: TokenRequest): async def api_refresh_token(body: RefreshTokenRequest): return refresh_token(body.refresh_token) + @router.delete("/tokens", name="Invalidate the token (log out)") async def logout(jwt_decoded=Depends(jwt_bearer.JWTBearer())): return None + @router.get("/tokens", name="Validate the token") async def validate_token(jwt_decoded=Depends(jwt_bearer.JWTBearer())): return jwt_decoded diff --git a/backend/t4cclient/routes/__init__.py b/backend/t4cclient/routes/__init__.py index cda9900da..b4b8ec3aa 100644 --- a/backend/t4cclient/routes/__init__.py +++ b/backend/t4cclient/routes/__init__.py @@ -1,14 +1,16 @@ +import importlib import logging from importlib import metadata from fastapi import APIRouter -from t4cclient import config +from t4cclient.config import config from ..core.authentication.provider.azure import routes from . import notices, repositories, sessions, sync, users log = logging.getLogger(__name__) + router = APIRouter() router.include_router(sessions.router, prefix="/sessions", tags=["Sessions"]) router.include_router(sync.router, prefix="/sync", tags=["T4C Server Synchronization"]) @@ -17,19 +19,19 @@ router.include_router(notices.router, prefix="/notices", tags=["Notices"]) # Load authentication routes -try: +try: ep = next( i for i in metadata.entry_points()["capellacollab.authentication.providers"] - if i.name == config.AUTHENTICATION_PROVIDER - ) - router.include_router( - ep.load().routes.router, - prefix="/{project}/extensions/backups/" + ep.name, - tags=[ep.name], + if i.name == config["authentication"]["provider"] ) -except StopIteration: - raise ValueError(f"Unknown authentication provider {config.AUTHENTICATION_PROVIDER}") from None - -router.include_router(ep.load().routes.router, prefix="/authentication", tags=[ep.name]) +except StopIteration: + raise ValueError( + f"Unknown authentication provider " + config["authentication"]["provider"] + ) from None +router.include_router( + importlib.import_module(".routes", ep.module).router, + prefix="/authentication", + tags=[ep.name], +) From c2484b5d47e38db95cf6eb136f2cb556190a2335 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Thu, 31 Mar 2022 12:50:03 +0200 Subject: [PATCH 010/143] Use entrypoints for operators --- backend/t4cclient/core/operators/__init__.py | 21 ++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/backend/t4cclient/core/operators/__init__.py b/backend/t4cclient/core/operators/__init__.py index 5faf5ee06..7c233bd65 100644 --- a/backend/t4cclient/core/operators/__init__.py +++ b/backend/t4cclient/core/operators/__init__.py @@ -1,15 +1,16 @@ from __future__ import annotations -from t4cclient.config import OPERATOR_TYPE -from t4cclient.core.operators.abc import Operator +from importlib import metadata -from . import docker, k8s +from t4cclient.config import config +from t4cclient.core.operators.abc import Operator -OPERATORS = { - "docker": docker.DockerOperator, - "kubernetes": k8s.KubernetesOperator, -} try: - OPERATOR: Operator = OPERATORS[OPERATOR_TYPE]() -except KeyError: - raise KeyError("Unsupported operator %s", OPERATOR_TYPE) from None + OPERATOR = next( + i + for i in metadata.entry_points()["capellacollab.operators"] + if i.name == config["operators"]["operator"] + ).load()() + +except StopIteration: + raise KeyError(f"Unknown operator " + config["operators"]["operator"]) from None From 5af4e75c2998726f1e9447740f95a0fd48a62bd3 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Thu, 31 Mar 2022 13:04:39 +0200 Subject: [PATCH 011/143] Use __name__ for logging --- backend/t4cclient/core/garbage_cleaner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/t4cclient/core/garbage_cleaner.py b/backend/t4cclient/core/garbage_cleaner.py index 69586179f..97d2ed019 100644 --- a/backend/t4cclient/core/garbage_cleaner.py +++ b/backend/t4cclient/core/garbage_cleaner.py @@ -5,7 +5,7 @@ from t4cclient.core.database import sessions from t4cclient.routes.sessions import inject_attrs_in_sessions -LOGGER = logging.getLogger(__file__) +LOGGER = logging.getLogger(__name__) @click.command() From 7abaeac0c7d342fa68496a5af0a45d225b852bf3 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Thu, 31 Mar 2022 14:12:47 +0200 Subject: [PATCH 012/143] Apply black formatting --- .../t4cclient/routes/repositories/__init__.py | 18 +++++++++++------- backend/t4cclient/routes/repositories/users.py | 11 ++++++----- backend/t4cclient/routes/sessions.py | 15 ++++++++------- backend/t4cclient/routes/users.py | 8 +++++--- 4 files changed, 30 insertions(+), 22 deletions(-) diff --git a/backend/t4cclient/routes/repositories/__init__.py b/backend/t4cclient/routes/repositories/__init__.py index 8699ccda6..39ae235c0 100644 --- a/backend/t4cclient/routes/repositories/__init__.py +++ b/backend/t4cclient/routes/repositories/__init__.py @@ -5,19 +5,23 @@ import t4cclient.core.services.repositories as repository_service from fastapi import APIRouter, Depends from requests import Session -from t4cclient.config import USERNAME_CLAIM -from t4cclient.core.authentication.database import (is_admin, verify_admin, - verify_repository_role) +from t4cclient.core.authentication.database import ( + is_admin, + verify_admin, + verify_repository_role, +) from t4cclient.core.authentication.helper import get_username from t4cclient.core.authentication.jwt_bearer import JWTBearer from t4cclient.core.database import get_db, repositories from t4cclient.core.database import users as database_users from t4cclient.extensions.modelsources.t4c import connection from t4cclient.routes.open_api_configuration import AUTHENTICATION_RESPONSES -from t4cclient.schemas.repositories import (GetRepositoryUserResponse, - PostRepositoryRequest, - RepositoryUserPermission, - RepositoryUserRole) +from t4cclient.schemas.repositories import ( + GetRepositoryUserResponse, + PostRepositoryRequest, + RepositoryUserPermission, + RepositoryUserRole, +) from . import users as router_users diff --git a/backend/t4cclient/routes/repositories/users.py b/backend/t4cclient/routes/repositories/users.py index f0663222a..8463f2a3a 100644 --- a/backend/t4cclient/routes/repositories/users.py +++ b/backend/t4cclient/routes/repositories/users.py @@ -4,11 +4,12 @@ import t4cclient.schemas.repositories as schema_repositories from fastapi import APIRouter, Depends, HTTPException from requests import HTTPError, Session -from t4cclient.config import USERNAME_CLAIM -from t4cclient.core.authentication.database import (check_username_not_admin, - is_admin, - verify_repository_role, - verify_write_permission) +from t4cclient.core.authentication.database import ( + check_username_not_admin, + is_admin, + verify_repository_role, + verify_write_permission, +) from t4cclient.core.authentication.helper import get_username from t4cclient.core.authentication.jwt_bearer import JWTBearer from t4cclient.core.database import get_db, repository_users, users diff --git a/backend/t4cclient/routes/sessions.py b/backend/t4cclient/routes/sessions.py index aa0d234f2..c1a9b3b3d 100644 --- a/backend/t4cclient/routes/sessions.py +++ b/backend/t4cclient/routes/sessions.py @@ -8,9 +8,7 @@ import t4cclient.schemas.repositories.users as users_schema from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session -from t4cclient.config import USERNAME_CLAIM -from t4cclient.core.authentication.database import (is_admin, - verify_repository_role) +from t4cclient.core.authentication.database import is_admin, verify_repository_role from t4cclient.core.authentication.helper import get_username from t4cclient.core.authentication.jwt_bearer import JWTBearer from t4cclient.core.credentials import generate_password @@ -21,10 +19,13 @@ from t4cclient.routes import guacamole as guacamole_route from t4cclient.routes.open_api_configuration import AUTHENTICATION_RESPONSES from t4cclient.schemas.repositories import RepositoryUserRole -from t4cclient.schemas.sessions import (AdvancedSessionResponse, - GetSessionsResponse, - GetSessionUsageResponse, - PostSessionRequest, WorkspaceType) +from t4cclient.schemas.sessions import ( + AdvancedSessionResponse, + GetSessionsResponse, + GetSessionUsageResponse, + PostSessionRequest, + WorkspaceType, +) from t4cclient.sql_models.sessions import DatabaseSession router = APIRouter() diff --git a/backend/t4cclient/routes/users.py b/backend/t4cclient/routes/users.py index 268dbe88e..eda388d63 100644 --- a/backend/t4cclient/routes/users.py +++ b/backend/t4cclient/routes/users.py @@ -2,15 +2,17 @@ from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session -from t4cclient.config import USERNAME_CLAIM from t4cclient.core.authentication.database import is_admin, verify_admin from t4cclient.core.authentication.helper import get_username from t4cclient.core.authentication.jwt_bearer import JWTBearer from t4cclient.core.database import get_db, repository_users, users from t4cclient.routes.open_api_configuration import AUTHENTICATION_RESPONSES from t4cclient.routes.sessions import inject_attrs_in_sessions -from t4cclient.schemas.repositories.users import (GetUserResponse, - PatchUserRoleRequest, Role) +from t4cclient.schemas.repositories.users import ( + GetUserResponse, + PatchUserRoleRequest, + Role, +) from t4cclient.schemas.sessions import AdvancedSessionResponse router = APIRouter() From abd90313145c31c6613683cf987738fa1ee3096a Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Thu, 31 Mar 2022 14:13:20 +0200 Subject: [PATCH 013/143] Add usernameAttribute to configuration --- frontend/src/environments/environment.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/environments/environment.ts b/frontend/src/environments/environment.ts index 453614433..3a3a3a7bb 100644 --- a/frontend/src/environments/environment.ts +++ b/frontend/src/environments/environment.ts @@ -4,4 +4,5 @@ export const environment = { privacy: 'https://example.com/privacy', imprint: 'https://example.com/imprint', authentication: 'AUTHENTICATION_TYPE', + usernameAttribute: 'attribute', }; From c198e7b04778cbc9725fd46658b519d2f87e3a51 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Thu, 31 Mar 2022 14:13:37 +0200 Subject: [PATCH 014/143] Use git password and git username from models --- backend/t4cclient/routes/sessions.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/backend/t4cclient/routes/sessions.py b/backend/t4cclient/routes/sessions.py index c1a9b3b3d..c3784ef73 100644 --- a/backend/t4cclient/routes/sessions.py +++ b/backend/t4cclient/routes/sessions.py @@ -134,6 +134,8 @@ def request_session( git_url=git_model.path, git_revision=git_model.revision, entrypoint=git_model.entrypoint, + git_username=git_model.username, + git_password=git_model.password, ) guacamole_identifier = guacamole.create_connection( From 14679322799124c87faa6a0a1158de183474646a Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Thu, 31 Mar 2022 14:14:08 +0200 Subject: [PATCH 015/143] Move code from __init__ to __main__ --- backend/t4cclient/__init__.py | 71 -------------------------------- backend/t4cclient/__main__.py | 76 +++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 71 deletions(-) create mode 100644 backend/t4cclient/__main__.py diff --git a/backend/t4cclient/__init__.py b/backend/t4cclient/__init__.py index 9b5756199..e69de29bb 100644 --- a/backend/t4cclient/__init__.py +++ b/backend/t4cclient/__init__.py @@ -1,71 +0,0 @@ -import logging -import random -import string -import time -from importlib import metadata - -import uvicorn -from fastapi import FastAPI -from fastapi.middleware.cors import CORSMiddleware - -logging.basicConfig(level=logging.INFO) -log = logging.getLogger(__name__) - -if __name__ == "__main__": - # This import statement is required and should not be removed! (Alembic will not work otherwise) - from t4cclient import config - from t4cclient.core.database import __main__ as database - from t4cclient.routes import router, status - - # Load extension models - eps = ( - metadata.entry_points()["capellacollab.extensions.backups"] - + metadata.entry_points()["capellacollab.extensions.modelsources"] - ) - for ep in eps: - log.info("Import models of extension %s", ep.name) - ep.load().models - - database.migrate_db() - - class HealthcheckFilter(logging.Filter): - def filter(self, record: logging.LogRecord) -> bool: - return record.getMessage().find("/healthcheck") == -1 - - logging.getLogger("uvicorn.access").addFilter(HealthcheckFilter()) - logging.basicConfig(level=config.LOGGING_LEVEL) - - app = FastAPI(title="Capella Collaboration") - - app.add_middleware( - CORSMiddleware, - allow_origins=["*"], - allow_credentials=True, - allow_methods=["POST", "GET", "OPTIONS", "DELETE", "PUT", "PATCH"], - allow_headers=["*"], - ) - - @app.middleware("http") - async def log_requests(request, call_next): - idem = "".join(random.choices(string.ascii_uppercase + string.digits, k=6)) - log.debug(f"rid={idem} start request path={request.url.path}") - start_time = time.time() - - response = await call_next(request) - - process_time = (time.time() - start_time) * 1000 - formatted_process_time = "{0:.2f}".format(process_time) - log.debug( - f"rid={idem} completed_in={formatted_process_time}ms status_code={response.status_code}" - ) - - return response - - @app.get("/healthcheck", tags=["Healthcheck"]) - async def healthcheck(): - return {"status": "alive"} - - app.include_router(status.router, prefix="", tags=["Status"]) - app.include_router(router, prefix="/api/v1") - - uvicorn.run(app) diff --git a/backend/t4cclient/__main__.py b/backend/t4cclient/__main__.py new file mode 100644 index 000000000..4ddd49c2d --- /dev/null +++ b/backend/t4cclient/__main__.py @@ -0,0 +1,76 @@ +import logging +import random +import string +import time +from importlib import metadata + +import uvicorn +from fastapi import FastAPI +from fastapi.middleware.cors import CORSMiddleware + +logging.basicConfig(level=logging.INFO) +log = logging.getLogger(__name__) + +# This import statement is required and should not be removed! (Alembic will not work otherwise) +from t4cclient.config import config +from t4cclient.core.database import __main__ as database +from t4cclient.routes import router, status + +# Load extension models +eps = ( + metadata.entry_points()["capellacollab.extensions.backups"] + + metadata.entry_points()["capellacollab.extensions.modelsources"] +) +for ep in eps: + log.info("Import models of extension %s", ep.name) + ep.load().models + +database.migrate_db() + + +class HealthcheckFilter(logging.Filter): + def filter(self, record: logging.LogRecord) -> bool: + return record.getMessage().find("/healthcheck") == -1 + + +logging.getLogger("uvicorn.access").addFilter(HealthcheckFilter()) +logging.getLogger(__name__).setLevel(config["logging"]["level"]) + +app = FastAPI(title="Capella Collaboration") + +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], + allow_credentials=True, + allow_methods=["POST", "GET", "OPTIONS", "DELETE", "PUT", "PATCH"], + allow_headers=["*"], +) + + +@app.middleware("http") +async def log_requests(request, call_next): + idem = "".join(random.choices(string.ascii_uppercase + string.digits, k=6)) + log.debug(f"rid={idem} start request path={request.url.path}") + start_time = time.time() + + response = await call_next(request) + + process_time = (time.time() - start_time) * 1000 + formatted_process_time = "{0:.2f}".format(process_time) + log.debug( + f"rid={idem} completed_in={formatted_process_time}ms status_code={response.status_code}" + ) + + return response + + +@app.get("/healthcheck", tags=["Healthcheck"]) +async def healthcheck(): + return {"status": "alive"} + + +app.include_router(status.router, prefix="", tags=["Status"]) +app.include_router(router, prefix="/api/v1") + +if __name__ == "__main__": + uvicorn.run(app) From 520eaa13d0c05e41ceba7a1a8bace9502d8ce009 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Thu, 31 Mar 2022 14:14:21 +0200 Subject: [PATCH 016/143] Use usernameAttribute from environment --- frontend/src/app/services/user/user.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/services/user/user.service.ts b/frontend/src/app/services/user/user.service.ts index b20d0ecce..7c1807e35 100644 --- a/frontend/src/app/services/user/user.service.ts +++ b/frontend/src/app/services/user/user.service.ts @@ -44,7 +44,7 @@ export class UserService { getUsernameFromLocalStorage(): string { return JSON.parse( atob(this.localStorageService.getValue('access_token').split('.')[1]) - )['preferred_username']; + )[environment.usernameAttribute]; } getOwnActiveSessions(): Observable> { From 69fdc2aab0ba36f795da8cff1be24dc2d90d1e31 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 1 Apr 2022 13:44:52 +0200 Subject: [PATCH 017/143] More flexibility: Allow custom attributes for containers --- .../ease/helm/templates/ease.deployment.yaml | 4 ++-- helm/templates/backend/backend.deployment.yaml | 4 +--- .../backend/garbage_cleaner.cronjob.yaml | 4 +--- helm/templates/backend/postgres.deployment.yaml | 4 +--- helm/templates/frontend/frontend.deployment.yaml | 4 +--- .../guacamole/guacamole.deployment.yaml | 4 +--- helm/templates/guacamole/guacd.deployment.yaml | 4 +--- .../templates/guacamole/postgres.deployment.yaml | 4 +--- helm/templates/mock/licence.deployment.yaml | 4 +--- helm/templates/mock/nginx.deployment.yaml | 4 +--- helm/templates/mock/t4c.deployment.yaml | 4 +--- helm/values.yaml | 16 ++++++++-------- 12 files changed, 20 insertions(+), 40 deletions(-) diff --git a/development/ease/helm/templates/ease.deployment.yaml b/development/ease/helm/templates/ease.deployment.yaml index 23bb385d0..a674be278 100644 --- a/development/ease/helm/templates/ease.deployment.yaml +++ b/development/ease/helm/templates/ease.deployment.yaml @@ -24,7 +24,6 @@ spec: containers: - name: {{ .Release.Name }}-backend image: {{ .Values.docker.registry }}/t4c/client/ease/remote/debug - imagePullPolicy: "Always" envFrom: - configMapRef: name: {{ .Release.Name }}-ease-env @@ -43,4 +42,5 @@ spec: memory: "6Gi" requests: cpu: "0.4" - memory: "1.6Gi" \ No newline at end of file + memory: "1.6Gi" + {{- toYaml .Values.cluster.containers | nindent 10 }} \ No newline at end of file diff --git a/helm/templates/backend/backend.deployment.yaml b/helm/templates/backend/backend.deployment.yaml index 7b2225b49..e26c88b65 100644 --- a/helm/templates/backend/backend.deployment.yaml +++ b/helm/templates/backend/backend.deployment.yaml @@ -25,7 +25,6 @@ spec: containers: - name: {{ .Release.Name }}-backend image: {{ .Values.docker.registry }}{{ .Values.docker.images.backend }} - imagePullPolicy: {{ .Values.pullPolicy }} envFrom: - configMapRef: name: {{ .Release.Name }}-backend-env @@ -48,5 +47,4 @@ spec: requests: cpu: "0.25" memory: 20Mi - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} + {{- toYaml .Values.cluster.containers | nindent 10 }} diff --git a/helm/templates/backend/garbage_cleaner.cronjob.yaml b/helm/templates/backend/garbage_cleaner.cronjob.yaml index 9bd5bb738..b2b68576a 100644 --- a/helm/templates/backend/garbage_cleaner.cronjob.yaml +++ b/helm/templates/backend/garbage_cleaner.cronjob.yaml @@ -17,7 +17,6 @@ spec: image: {{ .Values.docker.registry }}{{ .Values.docker.images.backend }} command: ["python3"] args: ["-m", "t4cclient.core.garbage_cleaner"] - imagePullPolicy: {{ $.Values.pullPolicy }} envFrom: - configMapRef: name: {{ .Release.Name }}-backend-env @@ -28,6 +27,5 @@ spec: requests: cpu: "0.25" memory: 10Mi - securityContext: - {{- toYaml $.Values.securityContext | nindent 16 }} + {{- toYaml .Values.cluster.containers | nindent 10 }} */}} \ No newline at end of file diff --git a/helm/templates/backend/postgres.deployment.yaml b/helm/templates/backend/postgres.deployment.yaml index 216e32aaa..37664b69f 100644 --- a/helm/templates/backend/postgres.deployment.yaml +++ b/helm/templates/backend/postgres.deployment.yaml @@ -22,7 +22,6 @@ spec: containers: - name: {{ .Release.Name }}-backend-postgres image: postgres:14.1 - imagePullPolicy: {{ .Values.pullPolicy }} env: - name: PGDATA value: /var/lib/postgresql/data/data @@ -56,6 +55,5 @@ spec: volumeMounts: - name: {{ .Release.Name }}-data mountPath: /var/lib/postgresql/data - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} + {{- toYaml .Values.cluster.containers | nindent 10 }} {{ end }} diff --git a/helm/templates/frontend/frontend.deployment.yaml b/helm/templates/frontend/frontend.deployment.yaml index e06525907..bfe480b1d 100644 --- a/helm/templates/frontend/frontend.deployment.yaml +++ b/helm/templates/frontend/frontend.deployment.yaml @@ -17,7 +17,6 @@ spec: containers: - name: {{ .Release.Name }}-frontend image: {{ .Values.docker.registry }}{{ .Values.docker.images.frontend }} - imagePullPolicy: {{ .Values.pullPolicy }} ports: - name: http containerPort: 80 @@ -33,5 +32,4 @@ spec: requests: cpu: "0.25" memory: 5Mi - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} + {{- toYaml .Values.cluster.containers | nindent 10 }} diff --git a/helm/templates/guacamole/guacamole.deployment.yaml b/helm/templates/guacamole/guacamole.deployment.yaml index 761f3422d..407374b6f 100644 --- a/helm/templates/guacamole/guacamole.deployment.yaml +++ b/helm/templates/guacamole/guacamole.deployment.yaml @@ -17,7 +17,6 @@ spec: containers: - name: {{ .Release.Name }}-guacamole-guacamole image: guacamole/guacamole:latest - imagePullPolicy: {{ .Values.pullPolicy }} env: - name: GUACD_HOSTNAME value: {{ .Release.Name }}-guacamole-guacd @@ -63,5 +62,4 @@ spec: limits: memory: "2Gi" cpu: "2" - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} + {{- toYaml .Values.cluster.containers | nindent 10 }} diff --git a/helm/templates/guacamole/guacd.deployment.yaml b/helm/templates/guacamole/guacd.deployment.yaml index 5ee9a8760..2b76113e6 100644 --- a/helm/templates/guacamole/guacd.deployment.yaml +++ b/helm/templates/guacamole/guacd.deployment.yaml @@ -17,7 +17,6 @@ spec: containers: - name: {{ .Release.Name }}-guacamole-guacd image: guacamole/guacd:latest - imagePullPolicy: {{ .Values.pullPolicy }} ports: - name: guacd containerPort: 4822 @@ -39,5 +38,4 @@ spec: limits: memory: "1Gi" cpu: "1" - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} + {{- toYaml .Values.cluster.containers | nindent 10 }} diff --git a/helm/templates/guacamole/postgres.deployment.yaml b/helm/templates/guacamole/postgres.deployment.yaml index a665f4538..e9a11f111 100644 --- a/helm/templates/guacamole/postgres.deployment.yaml +++ b/helm/templates/guacamole/postgres.deployment.yaml @@ -25,7 +25,6 @@ spec: containers: - name: {{ .Release.Name }}-guacamole-postgres image: postgres:14.1 - imagePullPolicy: {{ .Values.pullPolicy }} env: - name: PGDATA value: /var/lib/postgresql/data/data @@ -65,6 +64,5 @@ spec: mountPath: /var/lib/postgresql/data - name: {{ .Release.Name }}-initsql mountPath: /docker-entrypoint-initdb.d - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} + {{- toYaml .Values.cluster.containers | nindent 10 }} {{ end }} diff --git a/helm/templates/mock/licence.deployment.yaml b/helm/templates/mock/licence.deployment.yaml index 0a5b566c1..f172e7b73 100644 --- a/helm/templates/mock/licence.deployment.yaml +++ b/helm/templates/mock/licence.deployment.yaml @@ -18,7 +18,6 @@ spec: containers: - name: {{ .Release.Name }}-licence-server-mock image: {{ .Values.docker.registry }}/t4c/licence/mock - imagePullPolicy: {{ .Values.pullPolicy }} ports: - name: http containerPort: 80 @@ -38,6 +37,5 @@ spec: requests: cpu: "0.1" memory: 20Mi - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} + {{- toYaml .Values.cluster.containers | nindent 10 }} {{ end }} diff --git a/helm/templates/mock/nginx.deployment.yaml b/helm/templates/mock/nginx.deployment.yaml index c46d3b87a..2a02dba50 100644 --- a/helm/templates/mock/nginx.deployment.yaml +++ b/helm/templates/mock/nginx.deployment.yaml @@ -22,7 +22,6 @@ spec: containers: - name: {{ .Release.Name }}-mock-nginx image: nginxinc/nginx-unprivileged - imagePullPolicy: Always ports: - name: http containerPort: 8080 @@ -37,6 +36,5 @@ spec: volumeMounts: - name: {{ .Release.Name }}-mock-nginx mountPath: /etc/nginx - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} + {{- toYaml .Values.cluster.containers | nindent 10 }} {{ end }} \ No newline at end of file diff --git a/helm/templates/mock/t4c.deployment.yaml b/helm/templates/mock/t4c.deployment.yaml index 7c2681665..24d949ebc 100644 --- a/helm/templates/mock/t4c.deployment.yaml +++ b/helm/templates/mock/t4c.deployment.yaml @@ -18,7 +18,6 @@ spec: containers: - name: {{ .Release.Name }}-t4c-server-mock image: {{ .Values.docker.registry }}/t4c/server/mock - imagePullPolicy: {{ .Values.pullPolicy }} ports: - name: http containerPort: 80 @@ -38,6 +37,5 @@ spec: requests: cpu: "0.1" memory: 20Mi - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} + {{- toYaml .Values.cluster.containers | nindent 10 }} {{ end }} diff --git a/helm/values.yaml b/helm/values.yaml index 14a4666d2..4906420b3 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -162,14 +162,14 @@ git: ### KUBERNETES RELATED CONFIGURATION ### ######################################## -# replicaCount: 1 - -pullPolicy: Always +# target: local | azure +target: local -imagePullSecrets: [] +cluster: + kind: Kubernetes # Kubernetes | OpenShift -# SecurityContext for Pods -securityContext: + containers: + # The following values are appended to each container -# target: local | azure -target: local \ No newline at end of file + service: + fqdn: capella.example.de \ No newline at end of file From da6f07a4855e4787dd0e7a4f91b7ea31a70d9f91 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 1 Apr 2022 13:45:13 +0200 Subject: [PATCH 018/143] Move ingress and nginx to routing --- .../{nginx => routing}/nginx.clusterip.yaml | 0 .../{nginx => routing}/nginx.configmap.yaml | 0 .../{nginx => routing}/nginx.deployment.yaml | 6 ++--- .../nginx.ingress.yaml} | 5 +++- .../routing/nginx.route.openshift.yaml | 24 +++++++++++++++++++ 5 files changed, 30 insertions(+), 5 deletions(-) rename helm/templates/{nginx => routing}/nginx.clusterip.yaml (100%) rename helm/templates/{nginx => routing}/nginx.configmap.yaml (100%) rename helm/templates/{nginx => routing}/nginx.deployment.yaml (81%) rename helm/templates/{ingress/ingress.yaml => routing/nginx.ingress.yaml} (94%) create mode 100644 helm/templates/routing/nginx.route.openshift.yaml diff --git a/helm/templates/nginx/nginx.clusterip.yaml b/helm/templates/routing/nginx.clusterip.yaml similarity index 100% rename from helm/templates/nginx/nginx.clusterip.yaml rename to helm/templates/routing/nginx.clusterip.yaml diff --git a/helm/templates/nginx/nginx.configmap.yaml b/helm/templates/routing/nginx.configmap.yaml similarity index 100% rename from helm/templates/nginx/nginx.configmap.yaml rename to helm/templates/routing/nginx.configmap.yaml diff --git a/helm/templates/nginx/nginx.deployment.yaml b/helm/templates/routing/nginx.deployment.yaml similarity index 81% rename from helm/templates/nginx/nginx.deployment.yaml rename to helm/templates/routing/nginx.deployment.yaml index 0370bc453..727062522 100644 --- a/helm/templates/nginx/nginx.deployment.yaml +++ b/helm/templates/routing/nginx.deployment.yaml @@ -5,7 +5,7 @@ metadata: labels: id: {{ .Release.Name }}-deployment-nginx annotations: - checksum/config: {{ include (print $.Template.BasePath "/nginx/nginx.configmap.yaml") . | sha256sum }} + checksum/config: {{ include (print $.Template.BasePath "/routing/nginx.configmap.yaml") . | sha256sum }} spec: replicas: {{ .Values.replicaCount | default 1 }} selector: @@ -23,7 +23,6 @@ spec: containers: - name: {{ .Release.Name }}-nginx image: nginxinc/nginx-unprivileged - imagePullPolicy: Always ports: - name: http containerPort: 8080 @@ -38,5 +37,4 @@ spec: volumeMounts: - name: {{ .Release.Name }}-nginx mountPath: /etc/nginx - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} + {{- toYaml .Values.cluster.containers | nindent 10 }} diff --git a/helm/templates/ingress/ingress.yaml b/helm/templates/routing/nginx.ingress.yaml similarity index 94% rename from helm/templates/ingress/ingress.yaml rename to helm/templates/routing/nginx.ingress.yaml index 6b2b48fed..e9f969b1e 100644 --- a/helm/templates/ingress/ingress.yaml +++ b/helm/templates/routing/nginx.ingress.yaml @@ -1,3 +1,5 @@ + +{{- if eq ".Values.cluster.kind" "Kubernetes" }} apiVersion: networking.k8s.io/v1 kind: Ingress metadata: @@ -44,4 +46,5 @@ spec: name: {{ .Release.Name }}-mock-clusterip port: number: 80 - {{ end }} \ No newline at end of file + {{ end }} +{{ end }} \ No newline at end of file diff --git a/helm/templates/routing/nginx.route.openshift.yaml b/helm/templates/routing/nginx.route.openshift.yaml new file mode 100644 index 000000000..7e278bab1 --- /dev/null +++ b/helm/templates/routing/nginx.route.openshift.yaml @@ -0,0 +1,24 @@ +{{- if eq .Values.cluster.kind "OpenShift" }} +{{ $frontend := dict "path" "/" "service" "frontend" }} +{{ $backend := dict "path" "/api/v1" "service" "nginx-clusterip" }} +{{ $guacamole := dict "path" "/guacamole" "service" "guacamole-guacamole" }} +{{ $routes := list $frontend $backend $guacamole }} +{{ range $route := $routes }} +kind: Route +apiVersion: route.openshift.io/v1 +metadata: + name: {{ $.Release.Name }}-route-{{ get $route "path" }} +spec: + host: "{{ $.Values.cluster.service.fqdn }}" + path: {{ get $route "path" }} + to: + kind: Service + name: {{ $.Release.Name }}-{{ get $route "service" }} + port: + targetPort: 80 + tls: + termination: edge + insecureEdgeTerminationPolicy: Redirect +--- +{{ end }} +{{ end }} \ No newline at end of file From 16fcfcd4ab97acdca488a5f987263cb8e0d64aaa Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 1 Apr 2022 14:13:00 +0200 Subject: [PATCH 019/143] Remove unnecessary pip install --- backend/Dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index 5569d4d8f..45b8bbb8e 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -12,7 +12,6 @@ RUN apt-get update && \ docker.io \ kubernetes-client && rm -rf /var/lib/apt/lists/* -RUN pip install fastapi uvicorn EXPOSE 80 COPY . /backend From 016366c5fbb2984c4ff23e3e3cac89e69d9935ca Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 1 Apr 2022 15:08:24 +0200 Subject: [PATCH 020/143] Move to yaml based backend config --- helm/config/backend.yaml | 102 ++++++++++++++++++ helm/templates/backend/backend.configmap.yaml | 2 + .../templates/backend/backend.deployment.yaml | 14 +-- .../backend/backend_env.configmap.yaml | 48 --------- 4 files changed, 112 insertions(+), 54 deletions(-) create mode 100644 helm/config/backend.yaml delete mode 100644 helm/templates/backend/backend_env.configmap.yaml diff --git a/helm/config/backend.yaml b/helm/config/backend.yaml new file mode 100644 index 000000000..8feb965ed --- /dev/null +++ b/helm/config/backend.yaml @@ -0,0 +1,102 @@ +docker: + images: + workspaces: + persistent: "{{ .Values.docker.registry.internal }}{{ .Values.docker.images.workspaces.persistent }}" + readonly: "{{ .Values.docker.registry.internal }}{{ .Values.docker.images.workspaces.readonly }}" + + backup: "{{ .Values.docker.registry.internal }}{{ .Values.docker.images.importer }}" + +operators: + operator: k8s + + k8s: + namespace: {{ .Values.backend.k8sSessionNamespace }} + storageClassName: {{ .Values.backend.storageClassName }} + +extensions: + guacamole: + baseURI: "http://{{ .Release.Name }}-guacamole-guacamole:8080/guacamole" + publicURI: "{{ .Values.general.scheme }}://{{ .Values.general.host }}:{{ .Values.general.port }}/guacamole" + + username: "{{ .Values.guacamole.username }}" + password: "{{ .Values.guacamole.password }}" + +authentication: + provider: "{{ .Values.backend.authentication.provider }}" + jwt: + usernameClaim: "{{ .Values.backend.authentication.jwt.usernameClaim }}" + + oauth: + # Only required when using provider oauth + endpoints: + tokenIssuance: "{{ .Values.backend.authentication.oauth.endpoints.tokenIssuance }}" + authorization: "{{ .Values.backend.authentication.oauth.endpoints.authorization }}" + + publicKey: | + {{- .Values.backend.authentication.oauth.publicKey | nindent 6}} + + client: + id: "{{ .Values.backend.authentication.oauth.client.id }}" + secret: "{{ .Values.backend.authentication.oauth.client.secret }}" + + redirectURI: "{{ .Values.backend.authentication.oauth.redirectURI }}" + + azure: + # Only required when using provider oauth + authorizationEndpoint: "{{ .Values.backend.authentication.azure.authorizationEndpoint }}" + + client: + id: "{{ .Values.backend.authentication.azure.client.id }}" + secret: "{{ .Values.backend.authentication.azure.client.secret }}" + + audience: "{{ .Values.backend.authentication.azure.audience }}" + redirectURI: "{{ .Values.backend.authentication.azure.redirectURI }}" + + connectConfigurationEndpoint: "{{ .Values.backend.authentication.azure.connectConfigurationEndpoint }}" + +modelsources: + t4c: + usageAPI: "{{ .Values.t4cServer.apis.usageStats }}" + restAPI: "{{ .Values.t4cServer.apis.restAPI }}" + + username: "{{ .Values.t4cServer.username }}" + password: "{{ .Values.t4cServer.password }}" + + host: "{{ .Values.t4cServer.host }}" + port: "{{ .Values.t4cServer.port }}" + licence: "{{ .Values.t4cServer.licenseKey }}" + +backups: + enabled: ["importer"] + + importer: + git: + email: "{{ .Values.git.email }}" + + jenkins: + username: "{{ .Values.jenkins.username }}" + password: "{{ .Values.jenkins.password }}" + baseURL: "{{ .Values.jenkins.baseURL }}" + + git: + credentialID: "{{ .Values.git.credentialID }}" + email: "{{ .Values.git.email }}" + scriptRepoURL: "{{ .Values.git.scriptRepoURL }}" + + +database: + {{ if .Values.database.deploy }} + url: "postgresql://backend:{{ .Values.database.backend.internal.password }}@{{ .Release.Name }}-backend-postgres:5432/backend" + {{ else }} + url: "{{ .Values.database.backend.external.uri }}" + {{ end }} + + +initial: + admin: "{{ .Values.database.backend.initialAdmin }}" + +logging: + level: DEBUG + +requests: + timeout: 2 \ No newline at end of file diff --git a/helm/templates/backend/backend.configmap.yaml b/helm/templates/backend/backend.configmap.yaml index 0eb2d81e9..23cbb0462 100644 --- a/helm/templates/backend/backend.configmap.yaml +++ b/helm/templates/backend/backend.configmap.yaml @@ -6,3 +6,5 @@ metadata: labels: id: {{ .Release.Name }}-configmap-backend data: + config.yaml: | + {{- tpl (.Files.Get "config/backend.yaml") . | nindent 4 }} \ No newline at end of file diff --git a/helm/templates/backend/backend.deployment.yaml b/helm/templates/backend/backend.deployment.yaml index e26c88b65..6c9c21d6b 100644 --- a/helm/templates/backend/backend.deployment.yaml +++ b/helm/templates/backend/backend.deployment.yaml @@ -6,7 +6,6 @@ metadata: id: {{ .Release.Name }}-deployment-backend annotations: checksum/config: {{ include (print $.Template.BasePath "/backend/backend.configmap.yaml") . | sha256sum }} - checksum/config_env: {{ include (print $.Template.BasePath "/backend/backend_env.configmap.yaml") . | sha256sum }} spec: replicas: {{ .Values.replicaCount | default 1 }} selector: @@ -19,15 +18,12 @@ spec: spec: serviceAccountName: {{ .Release.Name }}-serviceaccount-backend volumes: - - name: {{ .Release.Name }}-backend + - name: config configMap: name: {{ .Release.Name }}-backend containers: - name: {{ .Release.Name }}-backend - image: {{ .Values.docker.registry }}{{ .Values.docker.images.backend }} - envFrom: - - configMapRef: - name: {{ .Release.Name }}-backend-env + image: {{ .Values.docker.registry.internal }}{{ .Values.docker.images.backend }} ports: - name: http containerPort: 80 @@ -47,4 +43,10 @@ spec: requests: cpu: "0.25" memory: 20Mi + volumeMounts: + - name: config + mountPath: "/root/.config/capellacollab/config.yaml" + readOnly: true + {{ if .Values.cluster.container }} {{- toYaml .Values.cluster.containers | nindent 10 }} + {{ end }} \ No newline at end of file diff --git a/helm/templates/backend/backend_env.configmap.yaml b/helm/templates/backend/backend_env.configmap.yaml deleted file mode 100644 index 48cc9c8d5..000000000 --- a/helm/templates/backend/backend_env.configmap.yaml +++ /dev/null @@ -1,48 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ .Release.Name }}-backend-env - namespace: {{ .Release.Namespace }} - labels: - id: {{ .Release.Name }}-configmap-backend-env -data: - OAUTH_TOKEN_ISSUANCE_ENDPOINT: {{ .Values.backend.oauth.tokenIssuanceEndpoint }} - OAUTH_AUTHORIZATION_ENDPOINT: {{ .Values.backend.oauth.authorizationEndpoint }} - OAUTH_CLIENT_ID: "{{ .Values.backend.oauth.client.id }}" - OAUTH_CLIENT_SECRET: "{{ .Values.backend.oauth.client.secret }}" - OAUTH_REDIRECT_URI: "{{ .Values.general.scheme }}://{{ .Values.general.host }}/oauth2/callback" - OAUTH_USERNAME_CLAIM: {{ .Values.backend.oauth.usernameClaim }} - DOCKER_PERSISTENT_IMAGE: {{ .Values.docker.registry }}{{ .Values.docker.images.workspaces.persistent }} - DOCKER_READONLY_IMAGE: {{ .Values.docker.registry }}{{ .Values.docker.images.workspaces.readonly }} - DOCKER_EASE_IMAGE: {{ .Values.docker.registry }}{{ .Values.docker.images.ease }} - DOCKER_IMPORTER_IMAGE: {{ .Values.docker.registry }}{{ .Values.docker.images.importer }} - GUACAMOLE_BASE_URI: "http://{{ .Release.Name }}-guacamole-guacamole:8080/guacamole" - GUACAMOLE_PUBLIC_URI: "{{ .Values.general.scheme }}://{{ .Values.general.host }}:{{ .Values.general.port }}/guacamole" - GUACAMOLE_USERNAME: "{{ .Values.guacamole.username }}" - GUACAMOLE_PASSWORD: "{{ .Values.guacamole.password }}" - {{ if .Values.database.deploy }} - SQL_DATABASE_URL: "postgresql://backend:{{ .Values.database.backend.internal.password }}@{{ .Release.Name }}-backend-postgres:5432/backend" - {{ else }} - SQL_DATABASE_URL: {{ .Values.database.backend.external.uri }} - {{ end }} - T4C_SERVER_USAGE_API: {{ .Values.t4cServer.apis.usageStats }} - T4C_SERVER_REST_API: {{ .Values.t4cServer.apis.restAPI }} - T4C_SERVER_USERNAME: {{ .Values.t4cServer.username }} - T4C_SERVER_PASSWORD: {{ .Values.t4cServer.password }} - T4C_SERVER_HOST: "{{ .Values.t4cServer.host }}" - T4C_SERVER_PORT: "{{ .Values.t4cServer.port }}" - T4C_SERVER_LICENCE: "{{ .Values.t4cServer.licenseKey }}" - KUBERNETES_NAMESPACE: {{ .Values.backend.k8sSessionNamespace }} - KUBERNETES_STORAGE_CLASS_NAME: {{ .Values.backend.storageClassName }} - KUBERNETES_STORAGE_ACCESS_MODE: {{ .Values.backend.storageAccessMode }} - OPERATOR_TYPE: kubernetes - JENKINS_USERNAME: {{ .Values.jenkins.username }} - JENKINS_PASSWORD: {{ .Values.jenkins.password }} - JENKINS_BASE_URL: {{ .Values.jenkins.baseURL }} - JENKINS_GIT_USERNAME: {{ .Values.git.username }} - JENKINS_GIT_EMAIL: {{ .Values.git.email }} - JENKINS_GIT_CREDENTIAL_ID: {{ .Values.git.credentialID }} - JENKINS_GIT_SCRIPT_REPO_URL: {{ .Values.git.scriptRepoURL }} - GIT_USERNAME: {{ .Values.git.username }} - GIT_PASSWORD: {{ .Values.git.password }} - USERS_INITIAL_ADMIN: {{ .Values.database.backend.initialAdmin }} From dafb6fe957b210d2eada058775125589486df05c Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 1 Apr 2022 15:09:19 +0200 Subject: [PATCH 021/143] Seperate internal and external registry --- .../ease/helm/templates/ease.deployment.yaml | 6 ++- .../backend/garbage_cleaner.cronjob.yaml | 4 +- .../backend/postgres.deployment.yaml | 4 +- .../frontend/frontend.deployment.yaml | 4 +- .../guacamole/guacamole.deployment.yaml | 2 + .../templates/guacamole/guacd.deployment.yaml | 2 + .../guacamole/postgres.deployment.yaml | 4 +- helm/templates/mock/licence.deployment.yaml | 4 +- helm/templates/mock/nginx.deployment.yaml | 4 +- helm/templates/mock/t4c.deployment.yaml | 4 +- helm/templates/routing/nginx.deployment.yaml | 6 ++- helm/values.yaml | 53 ++++++++++++++----- 12 files changed, 74 insertions(+), 23 deletions(-) diff --git a/development/ease/helm/templates/ease.deployment.yaml b/development/ease/helm/templates/ease.deployment.yaml index a674be278..626d6c06d 100644 --- a/development/ease/helm/templates/ease.deployment.yaml +++ b/development/ease/helm/templates/ease.deployment.yaml @@ -23,7 +23,7 @@ spec: claimName: {{ .Release.Name }}-pyease containers: - name: {{ .Release.Name }}-backend - image: {{ .Values.docker.registry }}/t4c/client/ease/remote/debug + image: {{ .Values.docker.registry.internal }}/t4c/client/ease/remote/debug envFrom: - configMapRef: name: {{ .Release.Name }}-ease-env @@ -43,4 +43,6 @@ spec: requests: cpu: "0.4" memory: "1.6Gi" - {{- toYaml .Values.cluster.containers | nindent 10 }} \ No newline at end of file + {{ if .Values.cluster.container }} + {{- toYaml .Values.cluster.containers | nindent 10 }} + {{ end }} \ No newline at end of file diff --git a/helm/templates/backend/garbage_cleaner.cronjob.yaml b/helm/templates/backend/garbage_cleaner.cronjob.yaml index b2b68576a..316c88ad8 100644 --- a/helm/templates/backend/garbage_cleaner.cronjob.yaml +++ b/helm/templates/backend/garbage_cleaner.cronjob.yaml @@ -14,7 +14,7 @@ spec: restartPolicy: "OnFailure" containers: - name: {{ .Release.Name }}-garbage-cleaner - image: {{ .Values.docker.registry }}{{ .Values.docker.images.backend }} + image: {{ .Values.docker.registry.internal }}{{ .Values.docker.images.backend }} command: ["python3"] args: ["-m", "t4cclient.core.garbage_cleaner"] envFrom: @@ -27,5 +27,7 @@ spec: requests: cpu: "0.25" memory: 10Mi + {{ if .Values.cluster.container }} {{- toYaml .Values.cluster.containers | nindent 10 }} + {{ end }} */}} \ No newline at end of file diff --git a/helm/templates/backend/postgres.deployment.yaml b/helm/templates/backend/postgres.deployment.yaml index 37664b69f..99986713a 100644 --- a/helm/templates/backend/postgres.deployment.yaml +++ b/helm/templates/backend/postgres.deployment.yaml @@ -21,7 +21,7 @@ spec: claimName: {{ .Release.Name }}-volume-backend-postgres containers: - name: {{ .Release.Name }}-backend-postgres - image: postgres:14.1 + image: {{ .Values.docker.registry.external }}/postgres:14.1 env: - name: PGDATA value: /var/lib/postgresql/data/data @@ -55,5 +55,7 @@ spec: volumeMounts: - name: {{ .Release.Name }}-data mountPath: /var/lib/postgresql/data + {{ if .Values.cluster.container }} {{- toYaml .Values.cluster.containers | nindent 10 }} + {{ end }} {{ end }} diff --git a/helm/templates/frontend/frontend.deployment.yaml b/helm/templates/frontend/frontend.deployment.yaml index bfe480b1d..b62e5dd8e 100644 --- a/helm/templates/frontend/frontend.deployment.yaml +++ b/helm/templates/frontend/frontend.deployment.yaml @@ -16,7 +16,7 @@ spec: spec: containers: - name: {{ .Release.Name }}-frontend - image: {{ .Values.docker.registry }}{{ .Values.docker.images.frontend }} + image: {{ .Values.docker.registry.internal }}{{ .Values.docker.images.frontend }} ports: - name: http containerPort: 80 @@ -32,4 +32,6 @@ spec: requests: cpu: "0.25" memory: 5Mi + {{ if .Values.cluster.container }} {{- toYaml .Values.cluster.containers | nindent 10 }} + {{ end }} diff --git a/helm/templates/guacamole/guacamole.deployment.yaml b/helm/templates/guacamole/guacamole.deployment.yaml index 407374b6f..ce5b31d28 100644 --- a/helm/templates/guacamole/guacamole.deployment.yaml +++ b/helm/templates/guacamole/guacamole.deployment.yaml @@ -62,4 +62,6 @@ spec: limits: memory: "2Gi" cpu: "2" + {{ if .Values.cluster.container }} {{- toYaml .Values.cluster.containers | nindent 10 }} + {{ end }} diff --git a/helm/templates/guacamole/guacd.deployment.yaml b/helm/templates/guacamole/guacd.deployment.yaml index 2b76113e6..616524278 100644 --- a/helm/templates/guacamole/guacd.deployment.yaml +++ b/helm/templates/guacamole/guacd.deployment.yaml @@ -38,4 +38,6 @@ spec: limits: memory: "1Gi" cpu: "1" + {{ if .Values.cluster.container }} {{- toYaml .Values.cluster.containers | nindent 10 }} + {{ end }} diff --git a/helm/templates/guacamole/postgres.deployment.yaml b/helm/templates/guacamole/postgres.deployment.yaml index e9a11f111..29d870efb 100644 --- a/helm/templates/guacamole/postgres.deployment.yaml +++ b/helm/templates/guacamole/postgres.deployment.yaml @@ -24,7 +24,7 @@ spec: name: {{ .Release.Name }}-configmap-guacamole-postgres containers: - name: {{ .Release.Name }}-guacamole-postgres - image: postgres:14.1 + image: {{ .Values.docker.registry.external }}/postgres:14.1 env: - name: PGDATA value: /var/lib/postgresql/data/data @@ -64,5 +64,7 @@ spec: mountPath: /var/lib/postgresql/data - name: {{ .Release.Name }}-initsql mountPath: /docker-entrypoint-initdb.d + {{ if .Values.cluster.container }} {{- toYaml .Values.cluster.containers | nindent 10 }} + {{ end }} {{ end }} diff --git a/helm/templates/mock/licence.deployment.yaml b/helm/templates/mock/licence.deployment.yaml index f172e7b73..3cad9d24d 100644 --- a/helm/templates/mock/licence.deployment.yaml +++ b/helm/templates/mock/licence.deployment.yaml @@ -17,7 +17,7 @@ spec: spec: containers: - name: {{ .Release.Name }}-licence-server-mock - image: {{ .Values.docker.registry }}/t4c/licence/mock + image: {{ .Values.docker.registry.internal }}/t4c/licence/mock ports: - name: http containerPort: 80 @@ -37,5 +37,7 @@ spec: requests: cpu: "0.1" memory: 20Mi + {{ if .Values.cluster.container }} {{- toYaml .Values.cluster.containers | nindent 10 }} + {{ end }} {{ end }} diff --git a/helm/templates/mock/nginx.deployment.yaml b/helm/templates/mock/nginx.deployment.yaml index 2a02dba50..223c0a47a 100644 --- a/helm/templates/mock/nginx.deployment.yaml +++ b/helm/templates/mock/nginx.deployment.yaml @@ -21,7 +21,7 @@ spec: name: {{ .Release.Name }}-mock-nginx containers: - name: {{ .Release.Name }}-mock-nginx - image: nginxinc/nginx-unprivileged + image: {{ .Values.docker.registry.external }}/nginxinc/nginx-unprivileged ports: - name: http containerPort: 8080 @@ -36,5 +36,7 @@ spec: volumeMounts: - name: {{ .Release.Name }}-mock-nginx mountPath: /etc/nginx + {{ if .Values.cluster.container }} {{- toYaml .Values.cluster.containers | nindent 10 }} + {{ end }} {{ end }} \ No newline at end of file diff --git a/helm/templates/mock/t4c.deployment.yaml b/helm/templates/mock/t4c.deployment.yaml index 24d949ebc..cca562564 100644 --- a/helm/templates/mock/t4c.deployment.yaml +++ b/helm/templates/mock/t4c.deployment.yaml @@ -17,7 +17,7 @@ spec: spec: containers: - name: {{ .Release.Name }}-t4c-server-mock - image: {{ .Values.docker.registry }}/t4c/server/mock + image: {{ .Values.docker.registry.internal }}/t4c/server/mock ports: - name: http containerPort: 80 @@ -37,5 +37,7 @@ spec: requests: cpu: "0.1" memory: 20Mi + {{ if .Values.cluster.container }} {{- toYaml .Values.cluster.containers | nindent 10 }} + {{ end }} {{ end }} diff --git a/helm/templates/routing/nginx.deployment.yaml b/helm/templates/routing/nginx.deployment.yaml index 727062522..c4db3481f 100644 --- a/helm/templates/routing/nginx.deployment.yaml +++ b/helm/templates/routing/nginx.deployment.yaml @@ -22,7 +22,7 @@ spec: name: {{ .Release.Name }}-nginx containers: - name: {{ .Release.Name }}-nginx - image: nginxinc/nginx-unprivileged + image: {{ .Values.docker.registry.external }}/nginxinc/nginx-unprivileged ports: - name: http containerPort: 8080 @@ -37,4 +37,8 @@ spec: volumeMounts: - name: {{ .Release.Name }}-nginx mountPath: /etc/nginx + {{ if .Values.cluster.container }} + {{ if .Values.cluster.container }} {{- toYaml .Values.cluster.containers | nindent 10 }} + {{ end }} + {{ end }} diff --git a/helm/values.yaml b/helm/values.yaml index 4906420b3..95d1b517c 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -5,7 +5,9 @@ docker: # Registry for Docker Images, will be used as prefix for Docker Images - registry: docker.io + registry: + internal: localhost + external: docker.io images: # Docker Image for the Frontend @@ -89,18 +91,43 @@ guacamole: password: guacadmin backend: - oauth: - # Endpoint that issues JWT Tokens - tokenIssuanceEndpoint: tbd - # Endpoint that authorizes the User - authorizationEndpoint: tbd - client: - # OAUTH2 Client ID - id: tbd - # OAUTH2 Client Secret - secret: tbd - # Add Username claim - usernameClaim: sub + authentication: + provider: azure # oauth | azure + jwt: + usernameClaim: preferred_username + + oauth: + # Only required when using provider oauth + endpoints: + # Endpoint that issues JWT Tokens + tokenIssuance: tbd + # Endpoint that authorizes the User + authorization: tbd + + publicKey: | + -----BEGIN PUBLIC KEY----- + -----END PUBLIC KEY----- + + client: + # OAUTH2 Client ID + id: tbd + # OAUTH2 Client Secret + secret: tbd + + redirectURI: tbd + + azure: + # Only required when using provider oauth + authorizationEndpoint: tbd + + client: + id: tbd + secret: tbd + + audience: tbd + redirectURI: tbd + + connectConfigurationEndpoint: tbd garbageCleaner: cron: "*/10 * * * *" From 6ffb294665621c64de20df0e8af8a1a528a015f6 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 1 Apr 2022 15:09:27 +0200 Subject: [PATCH 022/143] Update gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 20dcbc694..f5f12f6e0 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ /values*.yaml /secrets*.yaml /local -.mypy_cache \ No newline at end of file +.mypy_cache +deployments/* \ No newline at end of file From dc6fe6bcea90068fe36d8bb03ef7219578d35a4c Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 1 Apr 2022 16:13:15 +0200 Subject: [PATCH 023/143] Rename frontend and backend image to /capella/collab/... --- Makefile | 8 ++++---- helm/values.yaml | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index bfdd8250c..61766c476 100644 --- a/Makefile +++ b/Makefile @@ -12,12 +12,12 @@ all: backend frontend build: backend frontend capella ease backend: - docker build -t t4c/client/backend -t $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/client/backend backend - docker push $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/client/backend + docker build -t t4c/client/backend -t $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/capella/collab/backend backend + docker push $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/capella/collab/backend frontend: - docker build -t t4c/client/frontend -t $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/client/frontend frontend - docker push $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/client/frontend + docker build -t t4c/client/frontend -t $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/capella/collab/frontend frontend + docker push $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/capella/collab/frontend capella: docker build -t base capella-dockerimages/base diff --git a/helm/values.yaml b/helm/values.yaml index 95d1b517c..ea415d2da 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -11,10 +11,10 @@ docker: images: # Docker Image for the Frontend - frontend: /t4c/client/frontend + frontend: /capella/collab/frontend # Docker Image for the Backend - backend: /t4c/client/backend + backend: /capella/collab/backend # Docker Image for EASE ease: /t4c/client/ease From 7553a2963283a2011068986eaf682e98d8861fc2 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 1 Apr 2022 16:13:32 +0200 Subject: [PATCH 024/143] Add external registry for guacamole containers --- helm/templates/guacamole/guacamole.deployment.yaml | 2 +- helm/templates/guacamole/guacd.deployment.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/helm/templates/guacamole/guacamole.deployment.yaml b/helm/templates/guacamole/guacamole.deployment.yaml index ce5b31d28..539c25e5e 100644 --- a/helm/templates/guacamole/guacamole.deployment.yaml +++ b/helm/templates/guacamole/guacamole.deployment.yaml @@ -16,7 +16,7 @@ spec: spec: containers: - name: {{ .Release.Name }}-guacamole-guacamole - image: guacamole/guacamole:latest + image: {{ .Values.docker.registry.external }}/guacamole/guacamole:latest env: - name: GUACD_HOSTNAME value: {{ .Release.Name }}-guacamole-guacd diff --git a/helm/templates/guacamole/guacd.deployment.yaml b/helm/templates/guacamole/guacd.deployment.yaml index 616524278..2f6e4203c 100644 --- a/helm/templates/guacamole/guacd.deployment.yaml +++ b/helm/templates/guacamole/guacd.deployment.yaml @@ -16,7 +16,7 @@ spec: spec: containers: - name: {{ .Release.Name }}-guacamole-guacd - image: guacamole/guacd:latest + image: {{ .Values.docker.registry.external }}/guacamole/guacd:latest ports: - name: guacd containerPort: 4822 From d8c27a9cb4aad858c5dc5e1b0d0bef66f1e3f2fd Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 1 Apr 2022 16:13:49 +0200 Subject: [PATCH 025/143] Use servicename for routename --- helm/templates/routing/nginx.route.openshift.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helm/templates/routing/nginx.route.openshift.yaml b/helm/templates/routing/nginx.route.openshift.yaml index 7e278bab1..5f05d7564 100644 --- a/helm/templates/routing/nginx.route.openshift.yaml +++ b/helm/templates/routing/nginx.route.openshift.yaml @@ -7,7 +7,7 @@ kind: Route apiVersion: route.openshift.io/v1 metadata: - name: {{ $.Release.Name }}-route-{{ get $route "path" }} + name: {{ $.Release.Name }}-route-{{ get $route "service" }} spec: host: "{{ $.Values.cluster.service.fqdn }}" path: {{ get $route "path" }} From 8c01de754f289c94d5abd5f8ded402199821b389 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 1 Apr 2022 16:28:47 +0200 Subject: [PATCH 026/143] Use non-root nginx for frontend --- frontend/Dockerfile | 4 ++-- frontend/nginx.conf | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/frontend/Dockerfile b/frontend/Dockerfile index e4f6b46c2..d04df5c78 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -6,6 +6,6 @@ WORKDIR /work RUN npm install RUN npm run build -FROM nginx:latest +FROM nginxinc/nginx-unprivileged:latest COPY nginx.conf /etc/nginx/nginx.conf -COPY --from=build /work/dist/t4cclient /usr/share/nginx/html +COPY --from=build /work/dist/t4cclient /usr/share/nginx/html \ No newline at end of file diff --git a/frontend/nginx.conf b/frontend/nginx.conf index b7979edd3..0415c9926 100644 --- a/frontend/nginx.conf +++ b/frontend/nginx.conf @@ -1,3 +1,4 @@ +pid /tmp/nginx.pid; events{} http { include /etc/nginx/mime.types; From 2eb5d8409a88b602188b49dfa5a3ab96e7f6530b Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 1 Apr 2022 16:28:58 +0200 Subject: [PATCH 027/143] Update entrypoint for backend --- backend/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index 45b8bbb8e..4d3949f43 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -18,4 +18,4 @@ COPY . /backend WORKDIR /backend RUN pip install . -CMD ["uvicorn", "t4cclient:app", "--host", "0.0.0.0", "--port", "80"] +CMD ["uvicorn", "t4cclient.__main__:app", "--host", "0.0.0.0", "--port", "80"] From 3687f76ceffa82a7fd2c4815b746183474ac3928 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 1 Apr 2022 16:42:06 +0200 Subject: [PATCH 028/143] Listen on port 8080 instead of 80 The container doesn't have permissions to bind port 80 --- frontend/nginx.conf | 2 +- helm/templates/frontend/frontend.deployment.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/nginx.conf b/frontend/nginx.conf index 0415c9926..a2fdce7a6 100644 --- a/frontend/nginx.conf +++ b/frontend/nginx.conf @@ -3,7 +3,7 @@ events{} http { include /etc/nginx/mime.types; server { - listen 80 default_server; + listen 8080 default_server; server_name _; root /usr/share/nginx/html; index index.html; diff --git a/helm/templates/frontend/frontend.deployment.yaml b/helm/templates/frontend/frontend.deployment.yaml index b62e5dd8e..2383769af 100644 --- a/helm/templates/frontend/frontend.deployment.yaml +++ b/helm/templates/frontend/frontend.deployment.yaml @@ -19,7 +19,7 @@ spec: image: {{ .Values.docker.registry.internal }}{{ .Values.docker.images.frontend }} ports: - name: http - containerPort: 80 + containerPort: 8080 protocol: TCP livenessProbe: httpGet: From 5ca10bbd55773e2acc119b4bb4b8e72a862bc4a6 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 1 Apr 2022 17:06:27 +0200 Subject: [PATCH 029/143] Add system wide configuration file --- backend/t4cclient/config.py | 1 + helm/templates/backend/backend.deployment.yaml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/t4cclient/config.py b/backend/t4cclient/config.py index 6c7965ae7..e56784415 100644 --- a/backend/t4cclient/config.py +++ b/backend/t4cclient/config.py @@ -128,6 +128,7 @@ def _unsupported(self, *args, **kws): locations: list[pathlib.Path] = [ pathlib.Path(__file__).parents[1] / "config" / "config.yaml", pathlib.Path(appdirs.user_config_dir("capellacollab", "db")) / "config.yaml", + pathlib.Path("/etc/capellacollab/config.yaml"), ] log.debug("Searching for configuration files...") diff --git a/helm/templates/backend/backend.deployment.yaml b/helm/templates/backend/backend.deployment.yaml index 6c9c21d6b..1995222a1 100644 --- a/helm/templates/backend/backend.deployment.yaml +++ b/helm/templates/backend/backend.deployment.yaml @@ -45,7 +45,7 @@ spec: memory: 20Mi volumeMounts: - name: config - mountPath: "/root/.config/capellacollab/config.yaml" + mountPath: /etc/capellacollab readOnly: true {{ if .Values.cluster.container }} {{- toYaml .Values.cluster.containers | nindent 10 }} From 5d00d59bd8d65cc449e6c0992fe7aa3880906b09 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 4 Apr 2022 14:35:56 +0200 Subject: [PATCH 030/143] Use port 8000 instead of port 80 --- backend/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index 4d3949f43..b91c051d3 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -12,10 +12,10 @@ RUN apt-get update && \ docker.io \ kubernetes-client && rm -rf /var/lib/apt/lists/* -EXPOSE 80 +EXPOSE 8000 COPY . /backend WORKDIR /backend RUN pip install . -CMD ["uvicorn", "t4cclient.__main__:app", "--host", "0.0.0.0", "--port", "80"] +CMD ["uvicorn", "t4cclient.__main__:app", "--host", "0.0.0.0"] From 617d0d0016bbea54be0b495381d18632dbe598fa Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 4 Apr 2022 14:37:24 +0200 Subject: [PATCH 031/143] Adjust backend port in helm chart --- helm/templates/backend/backend.deployment.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helm/templates/backend/backend.deployment.yaml b/helm/templates/backend/backend.deployment.yaml index 1995222a1..77305cf3e 100644 --- a/helm/templates/backend/backend.deployment.yaml +++ b/helm/templates/backend/backend.deployment.yaml @@ -26,7 +26,7 @@ spec: image: {{ .Values.docker.registry.internal }}{{ .Values.docker.images.backend }} ports: - name: http - containerPort: 80 + containerPort: 8000 protocol: TCP livenessProbe: httpGet: From b832d3bc9dcfea50d0615aa489db3ac35d463e27 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 4 Apr 2022 15:34:48 +0200 Subject: [PATCH 032/143] Allow custom guacamole images --- helm/templates/guacamole/guacamole.deployment.yaml | 2 +- helm/templates/guacamole/guacd.deployment.yaml | 2 +- helm/values.yaml | 5 +++++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/helm/templates/guacamole/guacamole.deployment.yaml b/helm/templates/guacamole/guacamole.deployment.yaml index 539c25e5e..74b49b3ad 100644 --- a/helm/templates/guacamole/guacamole.deployment.yaml +++ b/helm/templates/guacamole/guacamole.deployment.yaml @@ -16,7 +16,7 @@ spec: spec: containers: - name: {{ .Release.Name }}-guacamole-guacamole - image: {{ .Values.docker.registry.external }}/guacamole/guacamole:latest + image: {{ .Values.docker.guacamole.guacamole }} env: - name: GUACD_HOSTNAME value: {{ .Release.Name }}-guacamole-guacd diff --git a/helm/templates/guacamole/guacd.deployment.yaml b/helm/templates/guacamole/guacd.deployment.yaml index 2f6e4203c..7da241bc8 100644 --- a/helm/templates/guacamole/guacd.deployment.yaml +++ b/helm/templates/guacamole/guacd.deployment.yaml @@ -16,7 +16,7 @@ spec: spec: containers: - name: {{ .Release.Name }}-guacamole-guacd - image: {{ .Values.docker.registry.external }}/guacamole/guacd:latest + image: {{ .Values.docker.guacamole.guacd }} ports: - name: guacd containerPort: 4822 diff --git a/helm/values.yaml b/helm/values.yaml index ea415d2da..d71353aab 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -29,6 +29,11 @@ docker: # Docker Image for the ReadOnly Workspace readonly: /capella/readonly + guacamole: + # The registry needs to specified here! + guacamole: docker.io/guacamole/guacamole + guacd: docker.io/guacamole/guacd + general: # Base URL on which the service listens host: localhost From d825ce608208cebf3fb102c7f8a52849ac37de62 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 4 Apr 2022 15:48:43 +0200 Subject: [PATCH 033/143] Trim username --- frontend/src/app/services/user/user.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/services/user/user.service.ts b/frontend/src/app/services/user/user.service.ts index 7c1807e35..c751fee97 100644 --- a/frontend/src/app/services/user/user.service.ts +++ b/frontend/src/app/services/user/user.service.ts @@ -44,7 +44,7 @@ export class UserService { getUsernameFromLocalStorage(): string { return JSON.parse( atob(this.localStorageService.getValue('access_token').split('.')[1]) - )[environment.usernameAttribute]; + )[environment.usernameAttribute].trim(); } getOwnActiveSessions(): Observable> { From ada9efa36d0005d1dbb6cdbbce7b7949394adebd Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 4 Apr 2022 16:05:57 +0200 Subject: [PATCH 034/143] Use new configuration access mode --- .../extensions/modelsources/t4c/connection.py | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/backend/t4cclient/extensions/modelsources/t4c/connection.py b/backend/t4cclient/extensions/modelsources/t4c/connection.py index f6ca0e848..7f34b20d7 100644 --- a/backend/t4cclient/extensions/modelsources/t4c/connection.py +++ b/backend/t4cclient/extensions/modelsources/t4c/connection.py @@ -18,7 +18,7 @@ def get_t4c_status(): try: log.debug("Fetch T4C status") r = requests.get( - config.T4C_USAGE_API + "/status/json", + config["modelsources"]["t4c"]["usageAPI"] + "/status/json", auth=T4C_BACKEND_AUTHENTICATION, timeout=config["requests"]["timeout"], ) @@ -80,7 +80,7 @@ def add_user_to_repository( repository: str, username: str, password: str = generate_password() ): r = requests.post( - config.T4C_REST_API + "/users", + config["modelsources"]["t4c"]["restAPI"] + "/users", params={"repositoryName": repository}, json={ "id": username, @@ -88,7 +88,7 @@ def add_user_to_repository( "password": password, }, auth=T4C_BACKEND_AUTHENTICATION, - timeout=config.REQUESTS_TIMEOUT, + timeout=config["requests"]["timeout"], ) # No exception if user does already exist (status_code 400) @@ -99,10 +99,10 @@ def add_user_to_repository( def remove_user_from_repository(repository: str, username: str): r = requests.delete( - config.T4C_REST_API + "/users/" + username, + config["modelsources"]["t4c"]["restAPI"] + "/users/" + username, params={"repositoryName": repository}, auth=T4C_BACKEND_AUTHENTICATION, - timeout=config.REQUESTS_TIMEOUT, + timeout=config["requests"]["timeout"], ) # No exception if user does not exist (status_code 404) if not r.ok and r.status_code != 404: @@ -111,7 +111,7 @@ def remove_user_from_repository(repository: str, username: str): def update_password_of_user(repository: str, username: str, password: str): r = requests.put( - config.T4C_REST_API + "/users/" + username, + config["modelsources"]["t4c"]["restAPI"] + "/users/" + username, params={"repositoryName": repository}, json={ "id": username, @@ -119,7 +119,7 @@ def update_password_of_user(repository: str, username: str, password: str): "password": password, }, auth=T4C_BACKEND_AUTHENTICATION, - timeout=config.REQUESTS_TIMEOUT, + timeout=config["requests"]["timeout"], ) r.raise_for_status() return r.json() @@ -127,9 +127,9 @@ def update_password_of_user(repository: str, username: str, password: str): def get_repositories() -> t.List[str]: r = requests.get( - config.T4C_REST_API + "/repositories", + config["modelsources"]["t4c"]["restAPI"] + "/repositories", auth=T4C_BACKEND_AUTHENTICATION, - timeout=config.REQUESTS_TIMEOUT, + timeout=config["requests"]["timeout"], ) r.raise_for_status() @@ -138,7 +138,7 @@ def get_repositories() -> t.List[str]: def create_repository(name: str) -> None: r = requests.post( - config.T4C_REST_API + "/repositories", + config["modelsources"]["t4c"]["restAPI"] + "/repositories", json={ "repositoryName": name, "authenticationType": "FILE", @@ -148,6 +148,6 @@ def create_repository(name: str) -> None: "datasourceType": "H2_EMBEDDED", }, auth=T4C_BACKEND_AUTHENTICATION, - timeout=config.REQUESTS_TIMEOUT, + timeout=config["requests"]["timeout"], ) r.raise_for_status() From a6b57c3b8cb7ca80d23159af5efc61c508e75b50 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 4 Apr 2022 16:06:14 +0200 Subject: [PATCH 035/143] Use http port for routing --- helm/templates/routing/nginx.route.openshift.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helm/templates/routing/nginx.route.openshift.yaml b/helm/templates/routing/nginx.route.openshift.yaml index 5f05d7564..12b86457c 100644 --- a/helm/templates/routing/nginx.route.openshift.yaml +++ b/helm/templates/routing/nginx.route.openshift.yaml @@ -15,7 +15,7 @@ spec: kind: Service name: {{ $.Release.Name }}-{{ get $route "service" }} port: - targetPort: 80 + targetPort: http tls: termination: edge insecureEdgeTerminationPolicy: Redirect From d7179744d2379ff136c1366d9d0dffb6be34873e Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 4 Apr 2022 16:06:41 +0200 Subject: [PATCH 036/143] Fix missing infix images in key --- helm/templates/guacamole/guacamole.deployment.yaml | 2 +- helm/templates/guacamole/guacd.deployment.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/helm/templates/guacamole/guacamole.deployment.yaml b/helm/templates/guacamole/guacamole.deployment.yaml index 74b49b3ad..bb778904a 100644 --- a/helm/templates/guacamole/guacamole.deployment.yaml +++ b/helm/templates/guacamole/guacamole.deployment.yaml @@ -16,7 +16,7 @@ spec: spec: containers: - name: {{ .Release.Name }}-guacamole-guacamole - image: {{ .Values.docker.guacamole.guacamole }} + image: {{ .Values.docker.images.guacamole.guacamole }} env: - name: GUACD_HOSTNAME value: {{ .Release.Name }}-guacamole-guacd diff --git a/helm/templates/guacamole/guacd.deployment.yaml b/helm/templates/guacamole/guacd.deployment.yaml index 7da241bc8..8d07bed43 100644 --- a/helm/templates/guacamole/guacd.deployment.yaml +++ b/helm/templates/guacamole/guacd.deployment.yaml @@ -16,7 +16,7 @@ spec: spec: containers: - name: {{ .Release.Name }}-guacamole-guacd - image: {{ .Values.docker.guacamole.guacd }} + image: {{ .Values.docker.images.guacamole.guacd }} ports: - name: guacd containerPort: 4822 From 4ce1fa4f7f0d0e4f8a25020ed72f447c6ea1a897 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 4 Apr 2022 16:38:02 +0200 Subject: [PATCH 037/143] Update signature of read only function --- backend/t4cclient/core/operators/abc.py | 8 +++++++- backend/t4cclient/core/operators/docker.py | 19 +++++++++++++------ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/backend/t4cclient/core/operators/abc.py b/backend/t4cclient/core/operators/abc.py index 3185f08b5..53e9775bd 100644 --- a/backend/t4cclient/core/operators/abc.py +++ b/backend/t4cclient/core/operators/abc.py @@ -33,7 +33,13 @@ def start_persistent_session( @classmethod @abc.abstractmethod def start_readonly_session( - self, password: str, git_url: str, git_revision: str, entrypoint: str + self, + password: str, + git_url: str, + git_revision: str, + entrypoint: str, + git_username: str, + git_password: str, ) -> t.Dict[str, t.Any]: """Start / Create a session diff --git a/backend/t4cclient/core/operators/docker.py b/backend/t4cclient/core/operators/docker.py index fa252f202..3ea9988e2 100644 --- a/backend/t4cclient/core/operators/docker.py +++ b/backend/t4cclient/core/operators/docker.py @@ -50,17 +50,24 @@ def start_persistent_session( ) def start_readonly_session( - self, password: str, git_url: str, git_revision: str, entrypoint: str + self, + password: str, + git_url: str, + git_revision: str, + entrypoint: str, + git_username: str, + git_password: str, ) -> t.Dict[str, t.Any]: con = self.client.containers.run( - image=config.READONLY_IMAGE, - ports={"3389/tcp": config.DOCKER_PORT_RANGE}, + image=config["docker"]["images"]["workspaces"]["readonly"], + ports={"3389/tcp": cfg["portRange"]}, environment={ - "RMT_PASSWORD": password, - "GIT_USERNAME": config.GIT_USERNAME, - "GIT_PASSWORD": config.GIT_PASSWORD, + "GIT_USERNAME": git_username, + "GIT_PASSWORD": git_password, "GIT_URL": git_url, "GIT_REVISION": git_revision, + "GIT_ENTRYPOINT": entrypoint, + "RMT_PASSWORD": password, }, detach=True, ) From 1798b4102dbbc0e7f012e06dc027d2a01a33683a Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 4 Apr 2022 16:38:27 +0200 Subject: [PATCH 038/143] Apply new configuration access mode --- backend/t4cclient/core/operators/docker.py | 14 +++-- backend/t4cclient/core/operators/k8s.py | 56 ++++++++----------- .../extensions/backups/ease/routes.py | 8 +-- .../extensions/backups/jenkins/__init__.py | 16 +++--- backend/t4cclient/extensions/guacamole.py | 6 +- 5 files changed, 45 insertions(+), 55 deletions(-) diff --git a/backend/t4cclient/core/operators/docker.py b/backend/t4cclient/core/operators/docker.py index 3ea9988e2..24264b31c 100644 --- a/backend/t4cclient/core/operators/docker.py +++ b/backend/t4cclient/core/operators/docker.py @@ -3,12 +3,13 @@ import shutil import typing as t -from t4cclient import config +from t4cclient.config import config from t4cclient.core.operators.abc import Operator import docker log = logging.getLogger(__name__) +cfg = config["operators"]["docker"] class DockerOperator(Operator): @@ -30,18 +31,19 @@ def start_persistent_session( shutil.chown(path_to_workspace, user=1001380000) con = self.client.containers.run( - image=config.PERSISTENT_IMAGE, + image=config["docker"]["images"]["workspaces"]["persistent"], volumes={ - f"{config.WORKSPACE_MOUNT_VOLUME}/workspaces/{username}": { + cfg["mountVolume"] + + f"/workspaces/{username}": { "bind": "/workspace", "mode": "rw", } }, - ports={"3389/tcp": config.DOCKER_PORT_RANGE}, + ports={"3389/tcp": cfg["portRange"]}, environment={ "RMT_PASSWORD": password, "T4C_REPOSITORIES": ",".join(repositories), - "T4C_HOST": config.T4C_SERVER_HOST, + "T4C_HOST": cfg["containerHost"], }, detach=True, ) @@ -97,5 +99,5 @@ def __export_attrs_from_container(self, container): ), "created_at": container.attrs["Created"], "mac": container.attrs["NetworkSettings"]["MacAddress"], - "host": config.DOCKER_HOST, + "host": cfg["containerHost"], } diff --git a/backend/t4cclient/core/operators/k8s.py b/backend/t4cclient/core/operators/k8s.py index c0ae01a29..a6ec4cf41 100644 --- a/backend/t4cclient/core/operators/k8s.py +++ b/backend/t4cclient/core/operators/k8s.py @@ -138,7 +138,7 @@ def _get_last_job_of_cronjob(self, name: str) -> str | None: jobs = [ item for item in self.v1_batch.list_namespaced_job( - namespace=config.KUBERNETES_NAMESPACE + namespace=cfg["namespace"] ).items if item.metadata.owner_references and item.metadata.owner_references[0].name == name @@ -155,7 +155,7 @@ def get_session_state(self, id: str) -> str: def _get_pod_state(self, label_selector: str): try: pods = self.v1_core.list_namespaced_pod( - namespace=config.KUBERNETES_NAMESPACE, label_selector=label_selector + namespace=cfg["namespace"], label_selector=label_selector ) log.debug("Received k8s pods: %s", pods.items[0].metadata.name) @@ -163,7 +163,7 @@ def _get_pod_state(self, label_selector: str): return ( self.v1_core.list_namespaced_event( - namespace=config.KUBERNETES_NAMESPACE, + namespace=cfg["namespace"], field_selector="involvedObject.name=" + pods.items[0].metadata.name, ) .items[-1] @@ -179,7 +179,7 @@ def _get_pod_state(self, label_selector: str): def _get_pod_starttime(self, label_selector: str) -> datetime | None: try: pods = self.v1_core.list_namespaced_pod( - namespace=config.KUBERNETES_NAMESPACE, label_selector=label_selector + namespace=cfg["namespace"], label_selector=label_selector ).to_dict() log.debug("Received k8s pods: %s", pods) @@ -190,18 +190,18 @@ def _get_pod_starttime(self, label_selector: str) -> datetime | None: def get_session_logs(self, id: str) -> str: pod_name = self.v1_core.list_namespaced_pod( - namespace=config.KUBERNETES_NAMESPACE, label_selector="app=" + id + namespace=cfg["namespace"], label_selector="app=" + id ).to_dict()["items"][0]["metadata"]["name"] return self.v1_core.read_namespaced_pod_log( name=pod_name, - namespace=config.KUBERNETES_NAMESPACE, + namespace=cfg["namespace"], ) def get_job_logs(self, id: str) -> str: try: log = self.v1_core.read_namespaced_pod_log( name=id, - namespace=config.KUBERNETES_NAMESPACE, + namespace=cfg["namespace"], ) if log: @@ -213,7 +213,7 @@ def get_job_logs(self, id: str) -> str: [ item.reason + ": " + item.message for item in self.v1_core.list_namespaced_event( - namespace=config.KUBERNETES_NAMESPACE, + namespace=cfg["namespace"], field_selector="involvedObject.name=" + id, ).items ] @@ -233,7 +233,7 @@ def create_cronjob( def trigger_cronjob(self, name: str) -> None: cronjob = self.v1_batch.read_namespaced_cron_job( - namespace=config.KUBERNETES_NAMESPACE, name=name + namespace=cfg["namespace"], name=name ) job = kubernetes.client.V1Job( api_version="batch/v1", @@ -255,9 +255,7 @@ def trigger_cronjob(self, name: str) -> None: ), spec=cronjob.spec.job_template.spec, ) - self.v1_batch.create_namespaced_job( - namespace=config.KUBERNETES_NAMESPACE, body=job - ) + self.v1_batch.create_namespaced_job(namespace=cfg["namespace"], body=job) def delete_cronjob(self, id: str) -> None: self._delete_cronjob(id=id) @@ -272,7 +270,7 @@ def get_cronjob_last_run(self, name: str) -> str | None: def _get_pod_id(self, label_selector: str) -> str: try: pods = self.v1_core.list_namespaced_pod( - namespace=config.KUBERNETES_NAMESPACE, label_selector=label_selector + namespace=cfg["namespace"], label_selector=label_selector ).to_dict() log.debug("Received k8s pods: %s", pods) @@ -301,9 +299,7 @@ def _export_attrs( "ports": set([3389]), "created_at": deployment.to_dict()["metadata"]["creation_timestamp"], "mac": "-", - "host": service.to_dict()["metadata"]["name"] - + "." - + config.KUBERNETES_NAMESPACE, + "host": service.to_dict()["metadata"]["name"] + "." + cfg["namespace"], } def _create_deployment( @@ -359,9 +355,7 @@ def _create_deployment( }, }, } - return self.v1_apps.create_namespaced_deployment( - config.KUBERNETES_NAMESPACE, body - ) + return self.v1_apps.create_namespaced_deployment(cfg["namespace"], body) def _create_cronjob( self, name: str, image: str, environment: t.Dict[str, str], schedule="* * * * *" @@ -407,7 +401,7 @@ def _create_cronjob( } return self.v1_batch.create_namespaced_cron_job( - namespace=config.KUBERNETES_NAMESPACE, body=body + namespace=cfg["namespace"], body=body ) def _create_service( @@ -432,7 +426,7 @@ def _create_service( "type": "ClusterIP", }, } - return self.v1_core.create_namespaced_service(config.KUBERNETES_NAMESPACE, body) + return self.v1_core.create_namespaced_service(cfg["namespace"], body) def _create_persistent_volume_claim(self, username): body = { @@ -442,14 +436,14 @@ def _create_persistent_volume_claim(self, username): "name": self._get_claim_name(username), }, "spec": { - "accessModes": [config.KUBERNETES_STORAGE_ACCESS_MODE], - "storageClassName": config.KUBERNETES_STORAGE_CLASS_NAME, + "accessModes": ["ReadWriteMany"], + "storageClassName": cfg["storageClassName"], "resources": {"requests": {"storage": "20Gi"}}, }, } try: self.v1_core.create_namespaced_persistent_volume_claim( - config.KUBERNETES_NAMESPACE, body + cfg["namespace"], body ) except kubernetes.client.exceptions.ApiException as e: if e.status == 409: @@ -463,28 +457,22 @@ def _get_claim_name(self, username: str) -> str: ) def _get_service(self, id: str): - return self.v1_core.read_namespaced_service(id, config.KUBERNETES_NAMESPACE) + return self.v1_core.read_namespaced_service(id, cfg["namespace"]) def _delete_deployment(self, id: str) -> kubernetes.client.V1Status: try: - return self.v1_apps.delete_namespaced_deployment( - id, config.KUBERNETES_NAMESPACE - ) + return self.v1_apps.delete_namespaced_deployment(id, cfg["namespace"]) except kubernetes.client.exceptions.ApiException: log.exception("Error deleting deployment") def _delete_cronjob(self, id: str) -> kubernetes.client.V1Status: try: - return self.v1_batch.delete_namespaced_cron_job( - id, config.KUBERNETES_NAMESPACE - ) + return self.v1_batch.delete_namespaced_cron_job(id, cfg["namespace"]) except kubernetes.client.exceptions.ApiException: log.exception("Error deleting cronjob") def _delete_service(self, id: str) -> kubernetes.client.V1Status: try: - return self.v1_core.delete_namespaced_service( - id, config.KUBERNETES_NAMESPACE - ) + return self.v1_core.delete_namespaced_service(id, cfg["namespace"]) except kubernetes.client.exceptions.ApiException: log.exception("Error deleting service") diff --git a/backend/t4cclient/extensions/backups/ease/routes.py b/backend/t4cclient/extensions/backups/ease/routes.py index c294e6b53..5c1f9ec84 100644 --- a/backend/t4cclient/extensions/backups/ease/routes.py +++ b/backend/t4cclient/extensions/backups/ease/routes.py @@ -6,7 +6,7 @@ import t4cclient.core.authentication.database as auth from fastapi import APIRouter, Depends from requests import Session -from t4cclient import config, extensions +from t4cclient.config import config from t4cclient.core import credentials from t4cclient.core.authentication.jwt_bearer import JWTBearer from t4cclient.core.database import get_db @@ -63,13 +63,13 @@ def create_backup( t4c.connection.add_user_to_repository(project, username, password) reference = OPERATOR.create_cronjob( - image=config.IMPORTER_IMAGE, + image=config["docker"]["images"]["backup"], environment={ "EASE_LOG_LOCATION": "/proc/1/fd/1", "GIT_REPO_URL": gitmodel.path, "GIT_REPO_BRANCH": gitmodel.revision, - "T4C_REPO_HOST": config.T4C_SERVER_HOST, - "T4C_REPO_PORT": config.T4C_SERVER_PORT, + "T4C_REPO_HOST": config["modelsources"]["t4c"]["host"], + "T4C_REPO_PORT": config["modelsources"]["t4c"]["port"], "T4C_REPO_NAME": project, "T4C_PROJECT_NAME": t4cmodel.name, "T4C_USERNAME": username, diff --git a/backend/t4cclient/extensions/backups/jenkins/__init__.py b/backend/t4cclient/extensions/backups/jenkins/__init__.py index 7be20afa9..a248941e4 100644 --- a/backend/t4cclient/extensions/backups/jenkins/__init__.py +++ b/backend/t4cclient/extensions/backups/jenkins/__init__.py @@ -46,7 +46,7 @@ def post_pipelines_to_jenkins(filecontent: str, pipeline_name: str): headers={ "Content-Type": "text/xml", }, - timeout=config.REQUESTS_TIMEOUT, + timeout=config["requests"]["timeout"], ) res.raise_for_status() @@ -62,12 +62,12 @@ def create_pipeline( def get_pipeline(db: sqlalchemy.orm.Session, pipeline_name: str): res = requests.get( - config.JENKINS_BASE_URL + cfg["baseURL"] + "/blue/rest/organizations/jenkins/pipelines/" + pipeline_name + "/runs", auth=JENKINS_AUTH, - timeout=config.REQUESTS_TIMEOUT, + timeout=config["requests"]["timeout"], ) if res.status_code == 404: crud_jenkins.remove_pipeline_by_name(db, pipeline_name) @@ -87,7 +87,7 @@ def get_pipeline(db: sqlalchemy.orm.Session, pipeline_name: str): latest_pipeline["startTime"] ).strftime("%Y-%m-%d %H:%M"), "result": latest_pipeline["result"], - "logs_url": config.JENKINS_BASE_URL + "logs_url": cfg["baseURL"] + "/job/" + pipeline_name + "/" @@ -100,15 +100,15 @@ def get_pipeline(db: sqlalchemy.orm.Session, pipeline_name: str): def trigger_job_run(pipeline_name: str): requests.post( - config.JENKINS_BASE_URL + "/job/" + pipeline_name + "/build?delay=0sec", + cfg["baseURL"] + "/job/" + pipeline_name + "/build?delay=0sec", auth=JENKINS_AUTH, - timeout=config.REQUESTS_TIMEOUT, + timeout=config["requests"]["timeout"], ).raise_for_status() def remove_pipeline(pipeline_name: str): requests.post( - config.JENKINS_BASE_URL + "/job/" + pipeline_name + "/doDelete", + cfg["baseURL"] + "/job/" + pipeline_name + "/doDelete", auth=JENKINS_AUTH, - timeout=config.REQUESTS_TIMEOUT, + timeout=config["requests"]["timeout"], ).raise_for_status() diff --git a/backend/t4cclient/extensions/guacamole.py b/backend/t4cclient/extensions/guacamole.py index cebd96f0b..1ab76703b 100644 --- a/backend/t4cclient/extensions/guacamole.py +++ b/backend/t4cclient/extensions/guacamole.py @@ -13,9 +13,9 @@ def get_admin_token() -> str: r = requests.post( cfg["baseURI"] + "/api/tokens", - auth=HTTPBasicAuth(config.GUACAMOLE_USERNAME, config.GUACAMOLE_PASSWORD), + auth=HTTPBasicAuth(cfg["username"], cfg["password"]), headers=headers, - timeout=config.REQUESTS_TIMEOUT, + timeout=config["requests"]["timeout"], ) r.raise_for_status() return r.json()["authToken"] @@ -26,7 +26,7 @@ def get_token(username: str, password: str) -> str: cfg["baseURI"] + "/api/tokens", auth=HTTPBasicAuth(username, password), headers=headers, - timeout=config.REQUESTS_TIMEOUT, + timeout=config["requests"]["timeout"], ) r.raise_for_status() return r.json() From b58f1492666f9ff6a0da94928a0281a6cf14a5a4 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 4 Apr 2022 16:48:06 +0200 Subject: [PATCH 039/143] Add healthcheckFilter to log --- backend/t4cclient/__main__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/t4cclient/__main__.py b/backend/t4cclient/__main__.py index 4ddd49c2d..970508ea3 100644 --- a/backend/t4cclient/__main__.py +++ b/backend/t4cclient/__main__.py @@ -34,6 +34,7 @@ def filter(self, record: logging.LogRecord) -> bool: logging.getLogger("uvicorn.access").addFilter(HealthcheckFilter()) +log.addFilter(HealthcheckFilter()) logging.getLogger(__name__).setLevel(config["logging"]["level"]) app = FastAPI(title="Capella Collaboration") From ee042467e576eed2ac952d8b4734d125ec1e360d Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 8 Apr 2022 10:28:46 +0200 Subject: [PATCH 040/143] Add Recreate strategy for containers with volume mount `kubectl rollout restart` will not work otherwise, because the volumes are still bound and the new Pod can't be created. --- helm/templates/backend/postgres.deployment.yaml | 2 ++ helm/templates/guacamole/postgres.deployment.yaml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/helm/templates/backend/postgres.deployment.yaml b/helm/templates/backend/postgres.deployment.yaml index 99986713a..41410f75e 100644 --- a/helm/templates/backend/postgres.deployment.yaml +++ b/helm/templates/backend/postgres.deployment.yaml @@ -10,6 +10,8 @@ spec: selector: matchLabels: id: {{ .Release.Name }}-deployment-backend-postgres + strategy: + type: Recreate template: metadata: labels: diff --git a/helm/templates/guacamole/postgres.deployment.yaml b/helm/templates/guacamole/postgres.deployment.yaml index 29d870efb..e604f859a 100644 --- a/helm/templates/guacamole/postgres.deployment.yaml +++ b/helm/templates/guacamole/postgres.deployment.yaml @@ -10,6 +10,8 @@ spec: selector: matchLabels: id: {{ .Release.Name }}-deployment-guacamole-postgres + strategy: + type: Recreate template: metadata: labels: From b4ed4e8c7d2a5404649d3b42279855eabba6b7c8 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 8 Apr 2022 10:50:49 +0200 Subject: [PATCH 041/143] Add support for custom session container configuration --- backend/t4cclient/core/operators/k8s.py | 8 +++++--- helm/config/backend.yaml | 3 +++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/backend/t4cclient/core/operators/k8s.py b/backend/t4cclient/core/operators/k8s.py index a6ec4cf41..a0ed3a616 100644 --- a/backend/t4cclient/core/operators/k8s.py +++ b/backend/t4cclient/core/operators/k8s.py @@ -347,6 +347,7 @@ def _create_deployment( }, "imagePullPolicy": "Always", "volumeMounts": volume_mount, + **cfg["cluster"]["containers"], }, ], "volumes": volume, @@ -388,6 +389,7 @@ def _create_cronjob( "memory": "1.6Gi", }, }, + **cfg["cluster"]["containers"], } ], "restartPolicy": "Never", @@ -463,16 +465,16 @@ def _delete_deployment(self, id: str) -> kubernetes.client.V1Status: try: return self.v1_apps.delete_namespaced_deployment(id, cfg["namespace"]) except kubernetes.client.exceptions.ApiException: - log.exception("Error deleting deployment") + log.exception("Error deleting deployment with id: %s", id) def _delete_cronjob(self, id: str) -> kubernetes.client.V1Status: try: return self.v1_batch.delete_namespaced_cron_job(id, cfg["namespace"]) except kubernetes.client.exceptions.ApiException: - log.exception("Error deleting cronjob") + log.exception("Error deleting cronjob with id: %s", id) def _delete_service(self, id: str) -> kubernetes.client.V1Status: try: return self.v1_core.delete_namespaced_service(id, cfg["namespace"]) except kubernetes.client.exceptions.ApiException: - log.exception("Error deleting service") + log.exception("Error deleting service with id: %s", id) diff --git a/helm/config/backend.yaml b/helm/config/backend.yaml index 8feb965ed..394f88c39 100644 --- a/helm/config/backend.yaml +++ b/helm/config/backend.yaml @@ -13,6 +13,9 @@ operators: namespace: {{ .Values.backend.k8sSessionNamespace }} storageClassName: {{ .Values.backend.storageClassName }} + cluster: + {{- toYaml .Values.cluster.containers | nindent 6 }} + extensions: guacamole: baseURI: "http://{{ .Release.Name }}-guacamole-guacamole:8080/guacamole" From 20774ce6d23921a62c752129549f9855055a53de Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 8 Apr 2022 14:50:13 +0200 Subject: [PATCH 042/143] Add internal keyword to Makefile --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 61766c476..caa3dda6e 100644 --- a/Makefile +++ b/Makefile @@ -55,7 +55,7 @@ helm-deploy: --namespace $(NAMESPACE) \ --values helm/values.yaml \ $$(test -f secrets.yaml && echo "--values secrets.yaml") \ - --set docker.registry=k3d-$(CLUSTER_REGISTRY_NAME):$(REGISTRY_PORT) \ + --set docker.registry.internal=k3d-$(CLUSTER_REGISTRY_NAME):$(REGISTRY_PORT) \ --set database.backend.initialAdmin=$(MY_EMAIL) \ --set general.port=8081 \ --set t4cServer.apis.usageStats="http://$(RELEASE)-licence-server-mock:80/mock" \ From a5eaec8ac30ef1b5f3447e1495a03f751d97ea42 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 8 Apr 2022 15:27:24 +0200 Subject: [PATCH 043/143] Add instructions for setup on Windows --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 813920926..7283af892 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,9 @@ MY_EMAIL=me@mydomain.com make deploy # build and deploy the manager app kubectl get pods --namespace=t4c-manager # verify your deployment - components should be in "Running" state ``` +Important! If you use Windows and the Git Bash to execute the commands, you have to set the environment variable: `MSYS_NO_PATHCONV=1`. +Otherwise the commands will break with UNIX paths, because the Git Bash tries to add a Windows path prefix. + TODO: it fails at this point, need to find a way to fix it TODO From d69bb26ff0aed66b9ba1710f0850c694135804d6 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 8 Apr 2022 15:32:39 +0200 Subject: [PATCH 044/143] Add default value for t4c licenseKey --- helm/values.yaml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/helm/values.yaml b/helm/values.yaml index d71353aab..62201d959 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -164,7 +164,7 @@ t4cServer: # IPv4 Address of the T4C Server host: localhost port: 2036 - licenseKey: + licenseKey: tbd jenkins: # Admin Credentials for Jenkins Instance @@ -204,4 +204,11 @@ cluster: # The following values are appended to each container service: - fqdn: capella.example.de \ No newline at end of file + fqdn: capella.example.de + + proxies: + # You can set or unset proxies here, which are used for the internal communication in the cluster + internal: + # Allowed keys: http, https + http: "" + https: "" \ No newline at end of file From 9f34684b3a69226ebb05420961d53bcaffd03bc6 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 8 Apr 2022 16:01:42 +0200 Subject: [PATCH 045/143] Change MY_EMAIL to MY_NAME, because username doesn't have to be an email --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index caa3dda6e..4f782cb6e 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ CLUSTER_REGISTRY_NAME = myregistry.localhost REGISTRY_PORT = 12345 RELEASE = dev-t4c-manager NAMESPACE = t4c-manager -MY_EMAIL ?= me@example.com +MY_NAME ?= me@example.com EASE_DEBUG_PORT = 3390 all: backend frontend @@ -56,7 +56,7 @@ helm-deploy: --values helm/values.yaml \ $$(test -f secrets.yaml && echo "--values secrets.yaml") \ --set docker.registry.internal=k3d-$(CLUSTER_REGISTRY_NAME):$(REGISTRY_PORT) \ - --set database.backend.initialAdmin=$(MY_EMAIL) \ + --set database.backend.initialAdmin=$(MY_NAME) \ --set general.port=8081 \ --set t4cServer.apis.usageStats="http://$(RELEASE)-licence-server-mock:80/mock" \ --set t4cServer.apis.restAPI="http://$(RELEASE)-t4c-server-mock:80/mock/api/v1.0" \ From d6f43b76e37a499782ba17eecc2a0604db1c2397 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 8 Apr 2022 16:03:28 +0200 Subject: [PATCH 046/143] Add config_template as example config template --- backend/config/config_template.yaml | 117 ++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 backend/config/config_template.yaml diff --git a/backend/config/config_template.yaml b/backend/config/config_template.yaml new file mode 100644 index 000000000..c8c85dd4a --- /dev/null +++ b/backend/config/config_template.yaml @@ -0,0 +1,117 @@ +docker: + images: + workspaces: + persistent: k3d-myregistry.localhost:12345/t4c/client/remote + readonly: k3d-myregistry.localhost:12345/capella/readonly + + backup: k3d-myregistry.localhost:12345/t4c/client/importer + +operators: + operator: k8s # docker | k8s + + docker: + ### DEPRECATED. PLEASE CONSIDER SWITCHING TO KUBERNETES ### + # Only required when using operator docker + mountVolume: C:/workspaces + portRange: 50000-50010 + containerHost: host.docker.internal + + k8s: + # Only required when using operator k8s + + context: k3d-mycluster # Only required, if you'd like to use a local k3d environment + namespace: t4c-sessions + + apiURL: # Only required when no kubectl context is available + token: # Only required when no kubectl context is available + + storageClassName: local-path + + cluster: + containers: + # The following values are appended to each container + +extensions: + guacamole: + baseURI: http://localhost:8081/guacamole + publicURI: http://localhost:8081/guacamole + + username: guacadmin + password: guacadmin + +authentication: + provider: oauth # oauth | azure + jwt: + usernameClaim: sub # preferred_username + + oauth: + # Only required when using provider oauth + endpoints: + tokenIssuance: + authorization: + + publicKey: | + + + client: + id: + secret: + + redirectURI: + + + azure: + # Only required when using provider oauth + authorizationEndpoint: http://tbd + + client: + id: tbd + secret: tbd + + audience: tbd + redirectURI: http://localhost:4200/oauth2/callback + + connectConfigurationEndpoint: https://login.microsoftonline.com/organizations/v2.0/.well-known/openid-configuration + +modelsources: + t4c: + usageAPI: http://localhost:8086 + restAPI: http://localhost:8090/api/v1.0 + + username: sampleuser + password: samplepassword + + host: localhost + port: 2036 + licence: test + +backups: + enabled: ["importer"] + + importer: + git: + email: bot@example.com + + jenkins: + username: + password: + baseURL: + + git: + credentialID: + email: bot@example.com + scriptRepoURL: + + + +database: + url: postgresql://dev:dev@localhost:5432/dev + +initial: + admin: your-username + +logging: + level: DEBUG + +requests: + timeout: 2 \ No newline at end of file From 32db06b192ab6b5f580e9d44c37cb4b3ea49ed71 Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Mon, 11 Apr 2022 13:24:11 +0200 Subject: [PATCH 047/143] Add LICENSE file (Apache v2) --- LICENSE | 202 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. From 103d6c6d3f14a1f97cb661ad94062da94dcd317b Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 11 Apr 2022 14:54:18 +0200 Subject: [PATCH 048/143] Remove quotes around key Helm if statements don't work with quotes around keys :( --- helm/templates/routing/nginx.ingress.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helm/templates/routing/nginx.ingress.yaml b/helm/templates/routing/nginx.ingress.yaml index e9f969b1e..5aec47525 100644 --- a/helm/templates/routing/nginx.ingress.yaml +++ b/helm/templates/routing/nginx.ingress.yaml @@ -1,5 +1,5 @@ -{{- if eq ".Values.cluster.kind" "Kubernetes" }} +{{- if eq .Values.cluster.kind "Kubernetes" }} apiVersion: networking.k8s.io/v1 kind: Ingress metadata: From 43c103998d2a8e3b233bc3f97bcee2758762ee93 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 11 Apr 2022 14:55:12 +0200 Subject: [PATCH 049/143] Update t4c modelsource to mock server --- backend/config/config_template.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/config/config_template.yaml b/backend/config/config_template.yaml index c8c85dd4a..a62a53f3d 100644 --- a/backend/config/config_template.yaml +++ b/backend/config/config_template.yaml @@ -75,8 +75,8 @@ authentication: modelsources: t4c: - usageAPI: http://localhost:8086 - restAPI: http://localhost:8090/api/v1.0 + usageAPI: http://localhost:8081/mock + restAPI: http://localhost:8081/mock/api/v1.0 username: sampleuser password: samplepassword From 09a07497cd998287b5eb578aa068343699e0cd20 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 11 Apr 2022 14:55:37 +0200 Subject: [PATCH 050/143] Allow config_template --- backend/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/.gitignore b/backend/.gitignore index 7b896d928..edf51b641 100644 --- a/backend/.gitignore +++ b/backend/.gitignore @@ -1,5 +1,6 @@ .idea config/* +!config/config_template.yaml .history **/__pycache__/ .vscode From 11ae58f7a733ed9fccc5118c932d75e4df2a7b66 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 11 Apr 2022 14:55:50 +0200 Subject: [PATCH 051/143] Rename python target to dev --- backend/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/Makefile b/backend/Makefile index 05d3d783d..4e7179387 100644 --- a/backend/Makefile +++ b/backend/Makefile @@ -11,10 +11,10 @@ database: -e POSTGRES_DB=dev \ postgres -python: +app: $(VENV)/uvicorn t4cclient.__main__:app --reload -dev: database python +dev: database app cleanup: docker stop capella-collab-postgres From 8f22fa54ebd40c10a61679a039310abdb3f4c4a7 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 11 Apr 2022 14:58:20 +0200 Subject: [PATCH 052/143] Add dev dependencies --- backend/setup.cfg | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/backend/setup.cfg b/backend/setup.cfg index 5abbcbc63..8ebbe24e0 100644 --- a/backend/setup.cfg +++ b/backend/setup.cfg @@ -24,6 +24,12 @@ install_requires = PyYAML appdirs +dev = + pytest + black + pylint + mypy + [options.entry_points] capellacollab.extensions.backups = ease = t4cclient.extensions.backups.ease From ac7f3b4abf340a890a3ae3601f3a0fb7f0dccc0f Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 11 Apr 2022 14:59:14 +0200 Subject: [PATCH 053/143] Add CONTRIBUTING.md --- CONTRIBUTING.md | 156 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..659385d3b --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,156 @@ +# Contributing + +Thanks for your interest in our project. Contributions are always welcome! + +We are committed to fostering a welcoming, respectful, and harassment-free +environment. Be kind! + +If you have questions, ideas or want to report a bug, feel free to [open an +issue](issues). Or go ahead and [open a pull request](pulls) to contribute +code. In order to reduce the burden on our maintainers, please make sure that +your code follows our style guidelines outlined below. + +## General + +This project consists of several services. Here is the architecture of the services: +TODO + +To get an overview of the services, it is also worth taking a look at the Helm Chart, +which can be found in the `helm` folder. + +We use REST APIs for the communication between frontend and backend. +Please follow the [RESTful web API design best practises](https://docs.microsoft.com/en-us/azure/architecture/best-practices/api-design). + +We recommend to get started with the [local k8d deployment](README.md). + +## Backend + +Requirements: +- `python` and `pip` +- `docker` +- `make` + +Run the following steps: +1. Navigate to the `backend` directory of your cloned repository. +2. We recommend that you develop inside of a virtual environment. To set it up, + run the following commands: + + ```sh + python3 -m venv .venv39 + source .venv39/bin/activate + pip install -U pip setuptools + pip install -e '.[dev]' + ``` +3. The backend uses various configuration settings. You can find them in the `config` directory. + Please copy the file `config_template.yaml` to `config.yaml` and adjust the values. + + *Hint*: If you already have the k8d cluster running and the if you have the application deployed, + then no configuration values need to be adjusted. It might be helpful to adjust the initial admin user. + Please use your username as value for the `intial.admin` configuration option. + This will setup your user as administrator during the database initialization. +4. A PostgreSQL database is required. You can run the following command to set up the database: + ```sh + make database + ``` +5. Start the application with: + ```sh + make app + ``` +6. You should see it running on port 8000. + - [Healthcheck](http://localhost:8000/healthcheck) + - [Documentation](http://localhost:8000/docs) + +We additionally recommend that you set up your editor / IDE as follows. + +- Indent with 4 spaces per level of indentation +- Maximum line length of 79 (add a ruler / thin line / highlighting / ...) +- Set up the editor to run `black`, `pylint`, `mypy` and `isort` when saving. + +### Create database migrations scripts + +To create an upgrade script automatically (this will compare the current database state with the models): +``` +cd t4cclient +alembic revision --autogenerate -m "Commit message" +``` + +## Frontend + +Requirements: +- `npm` package manager +- [Angular CLI](https://angular.io/cli#installing-angular-cli) +- `make` + +Run the following steps: +1. Navigate to the `frontend` folder +2. Optional: If you like use your custom favicon, please copy it to `src/favicon.ico` +3. Optional: If you like use your custom theme, replace the file `src/custom-theme.scss`. + You can generate custom themes [here](http://mcg.mbitson.com/) +4. Copy the file `src/environment.ts` to `environment.dev.ts` and adjust the values. +5. Run the frontend with: + ```sh + make dev + ``` +6. You should see the frontend running von port 4200. + +We additionally recommend that you set up your editor / IDE as follows. +- Set up the editor to run [prettier](https://prettier.io/) when saving. + +# Code style + +## Backend + +We base our code style on a modified version of the [Google style guide for +Python code](https://google.github.io/styleguide/pyguide.html). The key +differences are: + +- **Docstrings**: The [Numpy style + guide](https://numpydoc.readthedocs.io/en/latest/format.html) applies here. +- **Linting**: Use [pylint](https://github.com/PyCQA/pylint) for static code + analysis, and [mypy](https://github.com/python/mypy) for static type + checking. +- **Formatting**: Use [black](https://github.com/psf/black) as code + auto-formatter. + + Be aware of the different line length of 72 for docstrings. We currently do + not have a satisfactory solution to automatically apply or enforce this. + + Note that, while you're encouraged to do so in general, it is not a hard + requirement to break up long strings into smaller parts. Additionally, never + break up strings that are presented to the user in e.g. log messages, as that + makes it significantly harder to grep for them. + + Use [isort](https://github.com/PyCQA/isort) for automatic sorting of imports. + Its settings should automatically be picked up from the `pyproject.toml` file + as well. +- **Typing**: We do not make an exception for `typing` imports. Instead of + writing `from typing import SomeName`, use `import typing as t` and access + typing related classes like `t.TypedDict`. + + Use the new syntax and classes for typing introduced with Python 3.10 and + available using `from __future__ import annotations` since Python 3.8. Be + aware however that this only works in the context of annotations; the code + still needs to run on Python 3.8! This means that in some (rare) cases, you + *must* use the old-style type hints. + + - Instead of `t.Tuple`, `t.List` etc. use the builtin classes `tuple`, `list` + etc. + - For classes that are not builtin (e.g. `Iterable`), `import collections.abc + as cabc` and then use them like `cabc.Iterable`. + - Use [PEP-604](https://www.python.org/dev/peps/pep-0604/)-style unions, e.g. + `int | float` instead of `t.Union[int, float]`. + - Use `... | None` (with `None` always as the last union member) instead of + `t.Optional[...]` and always explicitly annotate where `None` is possible. +- **Python style rules**: For conflicting parts, the [Black code + style](https://black.readthedocs.io/en/stable/the_black_code_style/current_style.html) + wins. If you have set up `black` correctly, you don't need to worry about + this though :) +- When working with `dict`s, consider using `t.TypedDict` instead of a more + generic `dict[str, float|int|str]`-like annotation where possible, as the + latter is much less precise (often requiring additional `assert`s or + `isinstance` checks to pass) and can grow unwieldy very quickly. +- Prefer `t.NamedTuple` over `collections.namedtuple`, because the former uses + a more convenient `class ...:` syntax and also supports type annotations. + + + From c7770699f0daba74966b09228e9f9e0a68bbb2ad Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 11 Apr 2022 15:01:14 +0200 Subject: [PATCH 054/143] Remove limitations, add contributing --- README.md | 36 ++++++++++-------------------------- 1 file changed, 10 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 7283af892..06b1d379b 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ Turns local Capella experience into a browser-based collaboration platform for model-based projects. Designed to enable co-working across multiple organizations. Here are some of the key features: +* Run Capella in a browser (spaw) - without installation of any software +* * Supports both git and TeamForCapella co-working models * SSO via OAuth2 * No need to install or maintain local Capella clients - clients are made on demand in a underlaying Kubernetes cluster @@ -18,15 +20,15 @@ We have more exciting features on our roadmap, like integration of templating, p ## Requirements -Here is a short summary of what you would need to run this environment: TODO - ## Running locally with k3d -To run this thing locally you'll need: -* a Linux machine +### Prerequisites +To deploy the application you'll need: * [Docker](https://docs.docker.com/engine/install/ubuntu/) * [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/) * [helm](https://helm.sh/docs/intro/install/) + +If you'd like to run it locally, these tools are additionally required: * [K3D](https://k3d.io/) - a lightweight k8s cluster simulator * `nss-myhostname` to access local container registry - you can get in on Ubuntu via `sudo apt install libnss-myhostname` @@ -42,28 +44,9 @@ kubectl get pods --namespace=t4c-manager # verify your deployment - components Important! If you use Windows and the Git Bash to execute the commands, you have to set the environment variable: `MSYS_NO_PATHCONV=1`. Otherwise the commands will break with UNIX paths, because the Git Bash tries to add a Windows path prefix. -TODO: it fails at this point, need to find a way to fix it -TODO - -### Limitations +If something goes wrong, please open an issue on Github. -* Only works with Azure AD as authentication backend, create a small file `secrets.yaml` in this folder: - - ```yaml - backend: - oauth: - authorizationEndpoint: https://login.microsoftonline.com/ - usernameClaim: preferred_username - - client: - # OAUTH2 Client ID - id: - # OAUTH2 Client Secret - secret: - ``` - -* When launching a Guacamole container, the local address (when testing on K3D) is wrong. - Change the URL to point to port 8081. +## Deployment ## Running on a cluster @@ -79,4 +62,5 @@ Here comes a brief intro into architecture of this thing (TODO) # Contributing -TODO +We'd love to see your bug reports and improvement suggestions! Please take a look at [guidelines for contributors](CONTRIBUTING.md). +You'll also find instructions on how to set up a local development environment. \ No newline at end of file From e17d661edf1bd4e3aa7975f2e2cab4a754d3c3dc Mon Sep 17 00:00:00 2001 From: henrik997 Date: Mon, 11 Apr 2022 15:03:17 +0200 Subject: [PATCH 055/143] backend: check that user is not added twice to repository --- .../core/authentication/database/__init__.py | 13 +++++++++++++ backend/t4cclient/routes/repositories/users.py | 5 +++++ 2 files changed, 18 insertions(+) diff --git a/backend/t4cclient/core/authentication/database/__init__.py b/backend/t4cclient/core/authentication/database/__init__.py index c57b2c37b..b7222f823 100644 --- a/backend/t4cclient/core/authentication/database/__init__.py +++ b/backend/t4cclient/core/authentication/database/__init__.py @@ -84,3 +84,16 @@ def check_write_permission( if not user: return get_user(db=db, username=get_username(token)).role == Role.ADMIN return RepositoryUserPermission.WRITE == user.permission + + +def check_username_not_in_repository( + repository: str, + username: str, + db=Depends(get_db), +): + user = repository_users.get_user_of_repository(db, repository, username) + if user: + raise HTTPException( + status_code=409, + detail="The user already exists for this repository.", + ) diff --git a/backend/t4cclient/routes/repositories/users.py b/backend/t4cclient/routes/repositories/users.py index 8463f2a3a..9548093d0 100644 --- a/backend/t4cclient/routes/repositories/users.py +++ b/backend/t4cclient/routes/repositories/users.py @@ -1,5 +1,6 @@ import typing as t +# from backend.t4cclient.core.authentication.database import check_username_exists import t4cclient.extensions.modelsources.t4c.connection as t4c_manager import t4cclient.schemas.repositories as schema_repositories from fastapi import APIRouter, Depends, HTTPException @@ -9,6 +10,7 @@ is_admin, verify_repository_role, verify_write_permission, + check_username_not_in_repository, ) from t4cclient.core.authentication.helper import get_username from t4cclient.core.authentication.jwt_bearer import JWTBearer @@ -46,6 +48,9 @@ def add_user_to_repository( verify_repository_role( project, allowed_roles=["manager", "administrator"], token=token, db=db ) + + check_username_not_in_repository(project, body.username, db=db) + users.find_or_create_user(db, body.username) check_username_not_admin(body.username, db) if body.role == schema_repositories.RepositoryUserRole.MANAGER: From 0e7ef5d5e90de7b1051cc99b6be09f4e26a61763 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 11 Apr 2022 15:06:34 +0200 Subject: [PATCH 056/143] Fix issues and pulls reference --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 659385d3b..48efdb3e2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,7 +6,7 @@ We are committed to fostering a welcoming, respectful, and harassment-free environment. Be kind! If you have questions, ideas or want to report a bug, feel free to [open an -issue](issues). Or go ahead and [open a pull request](pulls) to contribute +issue](/../../issues). Or go ahead and [open a pull request](/../../pulls) to contribute code. In order to reduce the burden on our maintainers, please make sure that your code follows our style guidelines outlined below. From 10faffae836bf903eb572d8d6d655380d1bd3359 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 11 Apr 2022 15:12:57 +0200 Subject: [PATCH 057/143] Fix typos --- CONTRIBUTING.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 48efdb3e2..b217b79e3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -83,10 +83,10 @@ Requirements: Run the following steps: 1. Navigate to the `frontend` folder -2. Optional: If you like use your custom favicon, please copy it to `src/favicon.ico` -3. Optional: If you like use your custom theme, replace the file `src/custom-theme.scss`. +2. Optional: If you like to use your custom favicon, please copy it to `src/favicon.ico` +3. Optional: If you like to use your custom theme, replace the file `src/custom-theme.scss`. You can generate custom themes [here](http://mcg.mbitson.com/) -4. Copy the file `src/environment.ts` to `environment.dev.ts` and adjust the values. +4. Copy the file `src/environment.ts` to `src/environment.dev.ts` and adjust the values. 5. Run the frontend with: ```sh make dev From 4126314a758b45b84a8e54d849c77b90df22c61a Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 11 Apr 2022 15:17:27 +0200 Subject: [PATCH 058/143] Add instructions for Capella Dockerimages --- CONTRIBUTING.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b217b79e3..161f541c7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -23,6 +23,9 @@ Please follow the [RESTful web API design best practises](https://docs.microsoft We recommend to get started with the [local k8d deployment](README.md). +## Capella Dockerimages +Please follow the [README of the Capella Dockerimages repository](/../../../capella-dockerimages/blob/main/README.md). + ## Backend Requirements: From 246d0250b7a859ec410eb51d3a962c4c6bfd4b83 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 11 Apr 2022 15:21:19 +0200 Subject: [PATCH 059/143] Add capella-dockerimages as make target --- CONTRIBUTING.md | 4 ++++ Makefile | 1 + 2 files changed, 5 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 161f541c7..f4b70e3d4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -25,6 +25,10 @@ We recommend to get started with the [local k8d deployment](README.md). ## Capella Dockerimages Please follow the [README of the Capella Dockerimages repository](/../../../capella-dockerimages/blob/main/README.md). +When all files are in the right place, you can execute the following command to build and push the Dockerimages. +``` +make capella-dockerimages +``` ## Backend diff --git a/Makefile b/Makefile index 4f782cb6e..e433f010f 100644 --- a/Makefile +++ b/Makefile @@ -45,6 +45,7 @@ mock: docker build -t t4c/licence/mock -t $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/licence/mock mocks/licence-server docker push $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/licence/mock +capella-dockerimages: capella t4c-client readonly ease deploy: backend frontend capella t4c-client readonly ease mock helm-deploy helm-deploy: From 11ca1f5cbf0c0a06934692641cdd23a38d5700f1 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 11 Apr 2022 16:28:43 +0200 Subject: [PATCH 060/143] Add certs directory --- backend/t4cclient/core/authentication/provider/oauth/flow.py | 4 +++- certs/.gitkeep | 0 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 certs/.gitkeep diff --git a/backend/t4cclient/core/authentication/provider/oauth/flow.py b/backend/t4cclient/core/authentication/provider/oauth/flow.py index c2e36f57c..e4f5c7bac 100644 --- a/backend/t4cclient/core/authentication/provider/oauth/flow.py +++ b/backend/t4cclient/core/authentication/provider/oauth/flow.py @@ -5,7 +5,9 @@ cfg = config["authentication"]["oauth"] -auth_session = OAuth2Session(cfg["client"]["id"], redirect_uri=cfg["redirectURI"]) +auth_session = OAuth2Session( + cfg["client"]["id"], redirect_uri=cfg["redirectURI"], scope="openid" +) def get_auth_redirect_url() -> t.Dict[str, str]: diff --git a/certs/.gitkeep b/certs/.gitkeep new file mode 100644 index 000000000..e69de29bb From 5082e08b4c208ad08363184bc18a68cdbe4aa3cf Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 11 Apr 2022 17:54:17 +0200 Subject: [PATCH 061/143] oauth: Read from well-known url --- .../authentication/provider/oauth/__main__.py | 6 +- .../authentication/provider/oauth/flow.py | 28 ++++- .../authentication/provider/oauth/keystore.py | 107 ++++++++++++++++++ 3 files changed, 136 insertions(+), 5 deletions(-) create mode 100644 backend/t4cclient/core/authentication/provider/oauth/keystore.py diff --git a/backend/t4cclient/core/authentication/provider/oauth/__main__.py b/backend/t4cclient/core/authentication/provider/oauth/__main__.py index 33e6fe491..2e30bd451 100644 --- a/backend/t4cclient/core/authentication/provider/oauth/__main__.py +++ b/backend/t4cclient/core/authentication/provider/oauth/__main__.py @@ -1,11 +1,13 @@ from t4cclient.config import config +from .keystore import KeyStore + cfg = config["authentication"]["oauth"] def get_jwk_cfg(token: str) -> dict[str, any]: return { "algorithms": ["RS256"], - "audience": cfg["client"]["id"], - "key": cfg["publicKey"], + "audience": cfg["audience"] or cfg["client"]["id"], + "key": KeyStore.key_for_token(token).dict(), } diff --git a/backend/t4cclient/core/authentication/provider/oauth/flow.py b/backend/t4cclient/core/authentication/provider/oauth/flow.py index e4f5c7bac..a20a60a09 100644 --- a/backend/t4cclient/core/authentication/provider/oauth/flow.py +++ b/backend/t4cclient/core/authentication/provider/oauth/flow.py @@ -1,5 +1,6 @@ import typing as t +import requests from requests_oauthlib import OAuth2Session from t4cclient.config import config @@ -12,7 +13,7 @@ def get_auth_redirect_url() -> t.Dict[str, str]: auth_url, state = auth_session.authorization_url( - cfg["endpoints"]["authorization"], + read_well_known()["authorization_endpoint"], grant_type="authorization_code", ) return {"auth_url": auth_url, "state": state} @@ -20,7 +21,7 @@ def get_auth_redirect_url() -> t.Dict[str, str]: def get_token(code: str) -> t.Dict[str, t.Any]: return auth_session.fetch_token( - cfg["endpoints"]["tokenIssuance"], + read_well_known()["token_endpoint"], code=code, client_id=cfg["client"]["id"], client_secret=cfg["client"]["secret"], @@ -29,8 +30,29 @@ def get_token(code: str) -> t.Dict[str, t.Any]: def refresh_token(refresh_token: str) -> t.Dict[str, t.Any]: return auth_session.refresh_token( - cfg["endpoints"]["tokenIssuance"], + read_well_known()["token_endpoint"], refresh_token=refresh_token, client_id=cfg["client"]["id"], client_secret=cfg["client"]["secret"], ) + + +def read_well_known() -> dict[str, t.Any]: + if cfg["endpoints"]["wellKnown"]: + r = requests.get( + cfg["endpoints"]["wellKnown"], timeout=config["requests"]["timeout"] + ) + r.raise_for_status() + + resp = r.json() + + authorization_endpoint = resp["authorization_endpoint"] + token_endpoint = resp["token_endpoint"] + else: + authorization_endpoint = cfg["endpoints"]["authorization"] + token_endpoint = cfg["endpoints"]["tokenIssuance"] + + return { + "authorization_endpoint": authorization_endpoint, + "token_endpoint": token_endpoint, + } diff --git a/backend/t4cclient/core/authentication/provider/oauth/keystore.py b/backend/t4cclient/core/authentication/provider/oauth/keystore.py new file mode 100644 index 000000000..2258808c4 --- /dev/null +++ b/backend/t4cclient/core/authentication/provider/oauth/keystore.py @@ -0,0 +1,107 @@ +import logging +import time +import typing as t + +import jwt +import requests +from pydantic import BaseModel +from t4cclient.config import config + +log = logging.getLogger(__name__) +cfg = config["authentication"]["oauth"] + + +# Copied and adapted from https://github.com/marpaia/jwks/blob/master/jwks/jwks.py: + + +class _KeyStore: + def __init__( + self, + *, + jwks_uri: str, + algorithms: t.List[str] = ["RS256"], + key_refresh_interval=3600, + ): + self.jwks_uri = jwks_uri + self.algorithms = algorithms + self.public_keys = {} + self.key_refresh_interval = key_refresh_interval + self.public_keys_last_refreshed = 0 + self.refresh_keys() + + def keys_need_refresh(self) -> bool: + return ( + time.time() - self.public_keys_last_refreshed + ) > self.key_refresh_interval + + def refresh_keys(self) -> None: + try: + resp = requests.get(self.jwks_uri, timeout=config["requests"]["timeout"]) + except Exception as e: + log.error("Could not retrieve JWKS data from %s", self.jwks_uri) + return + jwks = JSONWebKeySet.parse_raw(resp.text) + self.public_keys_last_refreshed = time.time() + self.public_keys.clear() + for key in jwks.keys: + self.public_keys[key.kid] = key + + def key_for_token(self, token: str, *, in_retry: int = 0) -> t.Dict[str, t.Any]: + # Before we do anything, the validation keys may need to be refreshed. + # If so, refresh them. + if self.keys_need_refresh(): + self.refresh_keys() + + # Try to extract the claims from the token so that we can use the key ID + # to determine which key we should use to validate the token. + try: + unverified_claims = jwt.get_unverified_header(token) + except Exception: + raise InvalidTokenError("Unable to parse key ID from token") + # See if we have the key identified by this key ID. + + try: + return self.public_keys[unverified_claims["kid"]] + except KeyError: + # If we don't have this key and this is the first attempt (ie: we + # haven't refreshed keys yet), then try to refresh the keys and try + # again. + if in_retry: + raise KeyIDNotFoundError() + self.refresh_keys() + return self.key_for_token(token, in_retry=1) + + +def get_jwks_uri(wellknown_endpoint=cfg["endpoints"]["wellKnown"]): + openid_config = requests.get( + wellknown_endpoint, + timeout=config["requests"]["timeout"], + ).json() + return openid_config["jwks_uri"] + + +class JSONWebKey(BaseModel): + # alg: str + kty: str + use: str + n: str + e: str + kid: str + x5t: t.Optional[str] + x5c: t.Optional[t.List[str]] + + +class JSONWebKeySet(BaseModel): + keys: t.List[JSONWebKey] + + +class InvalidTokenError(Exception): + pass + + +class KeyIDNotFoundError(Exception): + pass + + +# Our "singleton" key store: +KeyStore = _KeyStore(jwks_uri=get_jwks_uri()) From 2b5795fd909b40cfd54b2dce9d427bd09651303a Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 11 Apr 2022 17:54:43 +0200 Subject: [PATCH 062/143] Add well-known endpoint and audience as config option --- backend/config/config_template.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/backend/config/config_template.yaml b/backend/config/config_template.yaml index a62a53f3d..f047a2f49 100644 --- a/backend/config/config_template.yaml +++ b/backend/config/config_template.yaml @@ -47,9 +47,12 @@ authentication: oauth: # Only required when using provider oauth endpoints: + wellKnown: https://localhost:8080/default/.well-known/openid-configuration tokenIssuance: authorization: + audience: default + publicKey: | From ff56d9a9bf9bc7907314919c4aebe11344a9ad3f Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 11 Apr 2022 17:56:27 +0200 Subject: [PATCH 063/143] Add certs to gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index f5f12f6e0..61b78bebc 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,5 @@ /secrets*.yaml /local .mypy_cache -deployments/* \ No newline at end of file +deployments/* +certs/* \ No newline at end of file From f5b2ddccc49ff07f8253804777f4aedc5c5058fc Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 11 Apr 2022 17:56:57 +0200 Subject: [PATCH 064/143] Use certs for backend for oauth calls --- backend/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/Makefile b/backend/Makefile index 4e7179387..a8af461f2 100644 --- a/backend/Makefile +++ b/backend/Makefile @@ -12,6 +12,7 @@ database: postgres app: + export REQUESTS_CA_BUNDLE=$$(pwd)/../certs/localhost.crt && \ $(VENV)/uvicorn t4cclient.__main__:app --reload dev: database app From fd633bbf1c7a2d45f2bd4b09968d8ab4ad5094ee Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 11 Apr 2022 17:57:33 +0200 Subject: [PATCH 065/143] Add oauth mock container --- mocks/oauth/Makefile | 22 ++++++++++++++++++++++ mocks/oauth/conf.json | 30 ++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 mocks/oauth/Makefile create mode 100644 mocks/oauth/conf.json diff --git a/mocks/oauth/Makefile b/mocks/oauth/Makefile new file mode 100644 index 000000000..3de5497d0 --- /dev/null +++ b/mocks/oauth/Makefile @@ -0,0 +1,22 @@ +CERTS_DIR = ../../certs/ + +ssl: + openssl req -x509 -out $(CERTS_DIR)localhost.crt -keyout $(CERTS_DIR)localhost.key \ + -newkey rsa:2048 -nodes -sha256 \ + -subj '/CN=localhost' -extensions EXT -config <( \ + printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth"); + openssl pkcs12 -export -in $(CERTS_DIR)localhost.crt -inkey $(CERTS_DIR)localhost.key -out $(CERTS_DIR)localhost.p12 -passout "pass:" + +start: + docker start oauth-mock || \ + docker run \ + --name oauth-mock \ + -v $$(pwd)/$(CERTS_DIR)localhost.p12:/opt/localhost.p12 \ + -v $$(pwd)/conf.json:/opt/conf.json \ + -p 8080:8080 \ + -e JSON_CONFIG_PATH=/opt/conf.json \ + ghcr.io/navikt/mock-oauth2-server:0.4.4 + +stop: + docker stop oauth-mock && \ + docker rm oauth-mock \ No newline at end of file diff --git a/mocks/oauth/conf.json b/mocks/oauth/conf.json new file mode 100644 index 000000000..f170f0186 --- /dev/null +++ b/mocks/oauth/conf.json @@ -0,0 +1,30 @@ +{ + "interactiveLogin": true, + "httpServer": { + "type": "NettyWrapper", + "ssl" : { + "keyPassword" : "", + "keystoreFile" : "/opt/localhost.p12", + "keystoreType" : "PKCS12", + "keystorePassword" : "" + } + }, + "tokenCallbacks": [ + { + "issuerId": "issuer1", + "tokenExpiry": 120, + "requestMappings": [ + { + "requestParam": "scope", + "match": "openid", + "claims": { + "sub": "subByScope", + "aud": [ + "audByScope" + ] + } + } + ] + } + ] +} From dd9b5a439809a93d2a9fdf950d1fa25c8530ef68 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 11 Apr 2022 17:57:43 +0200 Subject: [PATCH 066/143] Remove unused import --- mocks/t4c-server/mock/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mocks/t4c-server/mock/__init__.py b/mocks/t4c-server/mock/__init__.py index a2e493851..fb7fbf070 100644 --- a/mocks/t4c-server/mock/__init__.py +++ b/mocks/t4c-server/mock/__init__.py @@ -1,5 +1,4 @@ import logging -from sys import prefix from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware From 2356c6ca111eb4e404dd88fed2ff303d55aca8de Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Thu, 14 Apr 2022 10:44:15 +0200 Subject: [PATCH 067/143] Add storageAccessMode as configuration option In general, we require ReadWriteMany as storageAccessMode, but some StorageClasses only support ReadWriteOnce, e.g. in the local k8d cluster. --- backend/config/config_template.yaml | 1 + backend/t4cclient/core/operators/k8s.py | 2 +- helm/config/backend.yaml | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/backend/config/config_template.yaml b/backend/config/config_template.yaml index f047a2f49..53d3c1d88 100644 --- a/backend/config/config_template.yaml +++ b/backend/config/config_template.yaml @@ -26,6 +26,7 @@ operators: token: # Only required when no kubectl context is available storageClassName: local-path + storageAccessMode: ReadWriteOnce cluster: containers: diff --git a/backend/t4cclient/core/operators/k8s.py b/backend/t4cclient/core/operators/k8s.py index a0ed3a616..e532b2421 100644 --- a/backend/t4cclient/core/operators/k8s.py +++ b/backend/t4cclient/core/operators/k8s.py @@ -438,7 +438,7 @@ def _create_persistent_volume_claim(self, username): "name": self._get_claim_name(username), }, "spec": { - "accessModes": ["ReadWriteMany"], + "accessModes": [cfg["storageAccessMode"]], "storageClassName": cfg["storageClassName"], "resources": {"requests": {"storage": "20Gi"}}, }, diff --git a/helm/config/backend.yaml b/helm/config/backend.yaml index 394f88c39..b44c9ac1b 100644 --- a/helm/config/backend.yaml +++ b/helm/config/backend.yaml @@ -12,6 +12,7 @@ operators: k8s: namespace: {{ .Values.backend.k8sSessionNamespace }} storageClassName: {{ .Values.backend.storageClassName }} + storageAccessMode: {{ .Values.backend.storageAccessMode }} cluster: {{- toYaml .Values.cluster.containers | nindent 6 }} From 66c1694ba683deeca86b0783ebe436ed58c41745 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Thu, 14 Apr 2022 10:44:32 +0200 Subject: [PATCH 068/143] Force string as value for environment variables --- backend/t4cclient/core/operators/k8s.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/t4cclient/core/operators/k8s.py b/backend/t4cclient/core/operators/k8s.py index e532b2421..9b8900266 100644 --- a/backend/t4cclient/core/operators/k8s.py +++ b/backend/t4cclient/core/operators/k8s.py @@ -338,7 +338,7 @@ def _create_deployment( "image": image, "ports": [{"containerPort": 3389, "protocol": "TCP"}], "env": [ - {"name": key, "value": value} + {"name": key, "value": str(value)} for key, value in environment.items() ], "resources": { From be2a1d81921867d4a747239da049e9773a620af6 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Thu, 14 Apr 2022 10:44:54 +0200 Subject: [PATCH 069/143] Add containers key for cluster specific configuration --- helm/config/backend.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/helm/config/backend.yaml b/helm/config/backend.yaml index b44c9ac1b..5132a5477 100644 --- a/helm/config/backend.yaml +++ b/helm/config/backend.yaml @@ -15,7 +15,8 @@ operators: storageAccessMode: {{ .Values.backend.storageAccessMode }} cluster: - {{- toYaml .Values.cluster.containers | nindent 6 }} + containers: + {{- toYaml .Values.cluster.containers | nindent 8 }} extensions: guacamole: From 5bcbe3df4dc38bf81d2bae0a31013bb74f09c57a Mon Sep 17 00:00:00 2001 From: henrik997 Date: Thu, 14 Apr 2022 10:55:47 +0200 Subject: [PATCH 070/143] update .gitignore --- frontend/.gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frontend/.gitignore b/frontend/.gitignore index 9cfa35f46..a09fbf764 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -45,4 +45,6 @@ testem.log Thumbs.db /src/environments/environment.prod.ts -/src/environments/environment.dev.ts \ No newline at end of file +/src/environments/environment.dev.ts + +.angular \ No newline at end of file From 209c99c00599572dca1d287032694cda5ab312f9 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Thu, 14 Apr 2022 12:55:02 +0200 Subject: [PATCH 071/143] Add instructions for OAuth Server setup --- CONTRIBUTING.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f4b70e3d4..bbff162d7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -30,6 +30,28 @@ When all files are in the right place, you can execute the following command to make capella-dockerimages ``` +## OAuth Server +We use OAuth2 as authentication protocol for our application. Therefore we need an OAuth2 server. +For local development, we have an OAuth mock that needs to be started first. + +1. Navigate to the `mocks/oauth` directory. +2. The application requires `https` for requests to the the oauth server. + This means that we need a certificate for localhost. We therefore require the files `projectroot/certs/localhost.cert` and `projectroot/certs/localhost.p12`. + + You can easily create them with + ```sh + make ssl + ``` +3. Import the certificate to your local certificate store. + + Note for *Linux*-Users: If you run `make dev`, it automatically uses the certificates in the `projectroot/certs` directory. + Note for *Windows*-Users: Python doesn't read the certificates from the Windows certmgr. You have to add an environment variable `REQUESTS_CA_BUNDLE` with the path to the `localhost.crt` file. +4. Run the OAuth2-Mock-Server with: + ```sh + make start + ``` +5. Verify that the server runs, e.g. by navigating to [Well Known](https://localhost:8080/default/.well-known/openid-configuration) + ## Backend Requirements: From 4265eed974e76624adca433182a80781ed4484cd Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Thu, 14 Apr 2022 12:55:27 +0200 Subject: [PATCH 072/143] Set default redirectURI to localhost:4200 --- backend/config/config_template.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/config/config_template.yaml b/backend/config/config_template.yaml index f047a2f49..3deb92b02 100644 --- a/backend/config/config_template.yaml +++ b/backend/config/config_template.yaml @@ -60,7 +60,7 @@ authentication: id: secret: - redirectURI: + redirectURI: http://localhost:4200/oauth2/callback azure: From 15e6499c48e5308a32fefadcd55098e5ee8abc4b Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Thu, 14 Apr 2022 12:56:19 +0200 Subject: [PATCH 073/143] Update ssl command The -config style we use doesn't work in the Git bash. The new command is also sufficient and works perfectly in the Git bash. --- mocks/oauth/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mocks/oauth/Makefile b/mocks/oauth/Makefile index 3de5497d0..3b80b0786 100644 --- a/mocks/oauth/Makefile +++ b/mocks/oauth/Makefile @@ -3,8 +3,8 @@ CERTS_DIR = ../../certs/ ssl: openssl req -x509 -out $(CERTS_DIR)localhost.crt -keyout $(CERTS_DIR)localhost.key \ -newkey rsa:2048 -nodes -sha256 \ - -subj '/CN=localhost' -extensions EXT -config <( \ - printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth"); + -subj '/CN=localhost' \ + -addext "subjectAltName = DNS:localhost"; openssl pkcs12 -export -in $(CERTS_DIR)localhost.crt -inkey $(CERTS_DIR)localhost.key -out $(CERTS_DIR)localhost.p12 -passout "pass:" start: From aeaecf8c47e9954b3710b498967861c4cd2d737d Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Thu, 14 Apr 2022 13:02:22 +0200 Subject: [PATCH 074/143] Add comment on cleaning up your test environment --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 06b1d379b..93284ceda 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,12 @@ Otherwise the commands will break with UNIX paths, because the Git Bash tries to If something goes wrong, please open an issue on Github. +To clean up the environment, simply run: + +``` +make delete-cluster +``` + ## Deployment ## Running on a cluster From b219728b92e7f5c1cf3d45fdaae1fe553c8f4285 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Thu, 14 Apr 2022 13:55:41 +0200 Subject: [PATCH 075/143] Force update all npm packages --- frontend/package-lock.json | 29531 +++++++++++++---------------------- frontend/package.json | 52 +- 2 files changed, 10930 insertions(+), 18653 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index a43b461a1..c93102213 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -8,142 +8,170 @@ "name": "t4cclient", "version": "0.0.0", "dependencies": { - "@angular/animations": "~12.1.0", - "@angular/cdk": "^12.1.1", - "@angular/common": "~12.1.0", - "@angular/compiler": "~12.1.0", - "@angular/core": "~12.1.0", - "@angular/forms": "~12.1.0", - "@angular/material": "^12.1.1", - "@angular/platform-browser": "~12.1.0", - "@angular/platform-browser-dynamic": "~12.1.0", - "@angular/router": "~12.1.0", - "rxjs": "~6.6.0", - "simplebar-angular": "^2.3.5", - "tslib": "^2.2.0", - "zone.js": "~0.11.4" + "@angular/animations": "~13.3.3", + "@angular/cdk": "^13.3.3", + "@angular/common": "~13.3.3", + "@angular/compiler": "~13.3.3", + "@angular/core": "~13.3.3", + "@angular/forms": "~13.3.3", + "@angular/material": "^13.3.3", + "@angular/platform-browser": "~13.3.3", + "@angular/platform-browser-dynamic": "~13.3.3", + "@angular/router": "~13.3.3", + "rxjs": "~7.5.5", + "simplebar-angular": "^2.3.6", + "tslib": "^2.3.1", + "zone.js": "~0.11.5" }, "devDependencies": { - "@angular-devkit/build-angular": "~12.1.0", - "@angular/cli": "~12.1.0", - "@angular/compiler-cli": "~12.1.0", - "@types/jasmine": "~3.6.0", - "@types/node": "^12.11.1", - "jasmine-core": "~3.7.0", - "karma": "~6.3.0", - "karma-chrome-launcher": "~3.1.0", - "karma-coverage": "~2.0.3", - "karma-jasmine": "~4.0.0", - "karma-jasmine-html-reporter": "^1.5.0", - "typescript": "~4.3.2" + "@angular-devkit/build-angular": "^13.3.3", + "@angular/cli": "~13.3.3", + "@angular/compiler-cli": "~13.3.3", + "@types/jasmine": "~4.0.2", + "@types/node": "^17.0.24", + "jasmine-core": "~4.1.0", + "karma": "~6.3.18", + "karma-chrome-launcher": "~3.1.1", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.0.0", + "karma-jasmine-html-reporter": "^1.7.0", + "typescript": "~4.6.3" + } + }, + "node_modules/@ampproject/remapping": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-1.1.1.tgz", + "integrity": "sha512-YVAcA4DKLOj296CF5SrQ8cYiMRiUGc2sqFpLxsDGWE34suHqhGP/5yMsDHKsrh8hs8I5TiRVXNwKPWQpX3iGjw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "sourcemap-codec": "1.4.8" + }, + "engines": { + "node": ">=6.0.0" } }, "node_modules/@angular-devkit/architect": { - "version": "0.1201.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1201.4.tgz", - "integrity": "sha512-hGO5NrZxV8Z7sILwokt7H+1sMf+5tJS9PJszvYlIBSzG0LBkOwwLQDb4MD42ATXFru57SXNqMZDVKoi1kTgxAw==", + "version": "0.1303.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.3.tgz", + "integrity": "sha512-WRVVBCzLlMqRZVhZXGASHzNJK/OCAvl/DTGhlLuJDIjF7lVGnXHjtwNM8ilYZq949OnC3fly5Z61TfhbN/OHCg==", "dev": true, "dependencies": { - "@angular-devkit/core": "12.1.4", + "@angular-devkit/core": "13.3.3", "rxjs": "6.6.7" }, "engines": { - "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6", + "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, + "node_modules/@angular-devkit/architect/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/architect/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/@angular-devkit/build-angular": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-12.1.4.tgz", - "integrity": "sha512-9kMdnaU2dr8o7gJpuBsEHLUpa6huF8uZQEd1+jhKfByEY/xTQo8qztvmbhFhrSfDvdYRygNHItpt3pYEoCEOig==", - "dev": true, - "dependencies": { - "@angular-devkit/architect": "0.1201.4", - "@angular-devkit/build-optimizer": "0.1201.4", - "@angular-devkit/build-webpack": "0.1201.4", - "@angular-devkit/core": "12.1.4", - "@babel/core": "7.14.6", - "@babel/generator": "7.14.5", - "@babel/helper-annotate-as-pure": "7.14.5", - "@babel/plugin-proposal-async-generator-functions": "7.14.7", - "@babel/plugin-transform-async-to-generator": "7.14.5", - "@babel/plugin-transform-runtime": "7.14.5", - "@babel/preset-env": "7.14.7", - "@babel/runtime": "7.14.6", - "@babel/template": "7.14.5", - "@discoveryjs/json-ext": "0.5.3", - "@jsdevtools/coverage-istanbul-loader": "3.0.5", - "@ngtools/webpack": "12.1.4", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.3.3.tgz", + "integrity": "sha512-iEpNF3tF+9Gw+qQKL63fPFHIvWokJdrgVU4GzENQ5QeL8zk8iYTEbH3jWogq5tWy5+VmNP/mKkasq9i78lRiYw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "1.1.1", + "@angular-devkit/architect": "0.1303.3", + "@angular-devkit/build-webpack": "0.1303.3", + "@angular-devkit/core": "13.3.3", + "@babel/core": "7.16.12", + "@babel/generator": "7.16.8", + "@babel/helper-annotate-as-pure": "7.16.7", + "@babel/plugin-proposal-async-generator-functions": "7.16.8", + "@babel/plugin-transform-async-to-generator": "7.16.8", + "@babel/plugin-transform-runtime": "7.16.10", + "@babel/preset-env": "7.16.11", + "@babel/runtime": "7.16.7", + "@babel/template": "7.16.7", + "@discoveryjs/json-ext": "0.5.6", + "@ngtools/webpack": "13.3.3", "ansi-colors": "4.1.1", - "babel-loader": "8.2.2", + "babel-loader": "8.2.3", + "babel-plugin-istanbul": "6.1.1", "browserslist": "^4.9.1", - "cacache": "15.2.0", - "caniuse-lite": "^1.0.30001032", + "cacache": "15.3.0", "circular-dependency-plugin": "5.2.2", - "copy-webpack-plugin": "9.0.0", - "core-js": "3.15.1", - "critters": "0.0.10", - "css-loader": "5.2.6", - "css-minimizer-webpack-plugin": "3.0.1", - "find-cache-dir": "3.3.1", - "glob": "7.1.7", + "copy-webpack-plugin": "10.2.1", + "core-js": "3.20.3", + "critters": "0.0.16", + "css-loader": "6.5.1", + "esbuild-wasm": "0.14.22", + "glob": "7.2.0", "https-proxy-agent": "5.0.0", - "inquirer": "8.1.1", - "jest-worker": "27.0.2", + "inquirer": "8.2.0", + "jsonc-parser": "3.0.0", "karma-source-map-support": "1.4.0", - "less": "4.1.1", - "less-loader": "10.0.0", - "license-webpack-plugin": "2.3.20", - "loader-utils": "2.0.0", - "mini-css-extract-plugin": "1.6.2", - "minimatch": "3.0.4", - "open": "8.2.1", + "less": "4.1.2", + "less-loader": "10.2.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.0", + "mini-css-extract-plugin": "2.5.3", + "minimatch": "3.0.5", + "open": "8.4.0", "ora": "5.4.1", "parse5-html-rewriting-stream": "6.0.1", - "postcss": "8.3.5", + "piscina": "3.2.0", + "postcss": "8.4.5", "postcss-import": "14.0.2", - "postcss-loader": "6.1.0", - "postcss-preset-env": "6.7.0", - "raw-loader": "4.0.2", - "regenerator-runtime": "0.13.7", - "resolve-url-loader": "4.0.0", + "postcss-loader": "6.2.1", + "postcss-preset-env": "7.2.3", + "regenerator-runtime": "0.13.9", + "resolve-url-loader": "5.0.0", "rxjs": "6.6.7", - "sass": "1.35.1", - "sass-loader": "12.1.0", + "sass": "1.49.9", + "sass-loader": "12.4.0", "semver": "7.3.5", - "source-map": "0.7.3", - "source-map-loader": "3.0.0", - "source-map-support": "0.5.19", - "style-loader": "2.0.0", - "stylus": "0.54.8", - "stylus-loader": "6.1.0", - "terser": "5.7.0", - "terser-webpack-plugin": "5.1.3", + "source-map-loader": "3.0.1", + "source-map-support": "0.5.21", + "stylus": "0.56.0", + "stylus-loader": "6.2.0", + "terser": "5.11.0", "text-table": "0.2.0", "tree-kill": "1.2.2", - "tslib": "2.3.0", - "webpack": "5.44.0", - "webpack-dev-middleware": "5.0.0", - "webpack-dev-server": "3.11.2", + "tslib": "2.3.1", + "webpack": "5.70.0", + "webpack-dev-middleware": "5.3.0", + "webpack-dev-server": "4.7.3", "webpack-merge": "5.8.0", - "webpack-subresource-integrity": "1.5.2" + "webpack-subresource-integrity": "5.1.0" }, "engines": { - "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6", + "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, + "optionalDependencies": { + "esbuild": "0.14.22" + }, "peerDependencies": { - "@angular/compiler-cli": "^12.0.0 || ^12.1.0-next", - "@angular/localize": "^12.0.0 || ^12.1.0-next", - "@angular/service-worker": "^12.0.0 || ^12.1.0-next", + "@angular/compiler-cli": "^13.0.0 || ^13.3.0-rc.0", + "@angular/localize": "^13.0.0 || ^13.3.0-rc.0", + "@angular/service-worker": "^13.0.0 || ^13.3.0-rc.0", "karma": "^6.3.0", - "ng-packagr": "^12.0.0 || ^12.1.0-next", + "ng-packagr": "^13.0.0", "protractor": "^7.0.0", - "tailwindcss": "^2.0.0", - "tslint": "^6.1.0", - "typescript": "~4.2.3 || ~4.3.2" + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=4.4.3 <4.7" }, "peerDependenciesMeta": { "@angular/localize": { @@ -163,316 +191,434 @@ }, "tailwindcss": { "optional": true - }, - "tslint": { - "optional": true } } }, - "node_modules/@angular-devkit/build-angular/node_modules/tslib": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", - "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", - "dev": true - }, - "node_modules/@angular-devkit/build-optimizer": { - "version": "0.1201.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1201.4.tgz", - "integrity": "sha512-Hq+mDUe4xIyq4939JZaUkptsM89WnZOk8Qel6mS0T/bxMX/qs+nuGD5o+xDKkuayogbiTrLmyZBib0/90eSXEA==", + "node_modules/@angular-devkit/build-angular/node_modules/postcss": { + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", + "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", "dev": true, "dependencies": { - "source-map": "0.7.3", - "tslib": "2.3.0", - "typescript": "4.3.4" - }, - "bin": { - "build-optimizer": "src/build-optimizer/cli.js" + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.1" }, "engines": { - "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "webpack": "^5.30.0" + "node": "^10 || ^12 || >=14" }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, - "node_modules/@angular-devkit/build-optimizer/node_modules/tslib": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", - "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", - "dev": true - }, - "node_modules/@angular-devkit/build-optimizer/node_modules/typescript": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.4.tgz", - "integrity": "sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew==", + "node_modules/@angular-devkit/build-angular/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "dependencies": { + "tslib": "^1.9.0" }, "engines": { - "node": ">=4.2.0" + "npm": ">=2.0.0" } }, + "node_modules/@angular-devkit/build-angular/node_modules/rxjs/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/@angular-devkit/build-webpack": { - "version": "0.1201.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1201.4.tgz", - "integrity": "sha512-eMmbyHyWJZMQ1tfwVdja/iAk/eXJFYrF8b27gDV9gGI7MGB3KJ93AhkbPbcvlw4Hhx4+6M11GfeXzbwH0q9pnQ==", + "version": "0.1303.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1303.3.tgz", + "integrity": "sha512-v/z/YgwrAzYn1LfN9OHNxqcThyyg4LLx28hmHzDs5gyDShAK189y34EoT9uQ+lCyQrPVhP7UKACCxCdSwOEJiA==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1201.4", + "@angular-devkit/architect": "0.1303.3", "rxjs": "6.6.7" }, "engines": { - "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6", + "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "peerDependencies": { "webpack": "^5.30.0", - "webpack-dev-server": "^3.1.4" + "webpack-dev-server": "^4.0.0" + } + }, + "node_modules/@angular-devkit/build-webpack/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" } }, + "node_modules/@angular-devkit/build-webpack/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/@angular-devkit/core": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.1.4.tgz", - "integrity": "sha512-KOzGD8JbP/7EeUwPiU5x+fo3ZEQ5R4IVW5WoH92PaO3mdpqXC7UL2MWLct8PUe9il9nqJMvrBMldSSvP9PCT2w==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.3.tgz", + "integrity": "sha512-lfQwY9LuVRwcNVzGmyPcwOpb3CAobP4T+c3joR1LLIPS5lzcM0oeCE2bon9N52Ktn4Q/pH98dVtjWL+jSrUADw==", "dev": true, "dependencies": { - "ajv": "8.6.0", - "ajv-formats": "2.1.0", + "ajv": "8.9.0", + "ajv-formats": "2.1.1", "fast-json-stable-stringify": "2.1.0", "magic-string": "0.25.7", "rxjs": "6.6.7", "source-map": "0.7.3" }, "engines": { - "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6", + "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/core/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" } }, + "node_modules/@angular-devkit/core/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/@angular-devkit/schematics": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-12.1.4.tgz", - "integrity": "sha512-yD3y3pK/K5piOgvALFoCCiPp4H8emNa3yZL+vlpEpewVLpF1MM55LeTxc0PI5s0uqtOGVnvcbA5wYgMm3YsUEA==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.3.tgz", + "integrity": "sha512-S8UNlw6IoR/kxBYbiwesuA7oJGSnFkD6bJwVLhpHdT6Sqrz2/IrjHcNgTJRAvhsOKIbfDtMtXRzl/PUdWEfgyw==", "dev": true, "dependencies": { - "@angular-devkit/core": "12.1.4", + "@angular-devkit/core": "13.3.3", + "jsonc-parser": "3.0.0", + "magic-string": "0.25.7", "ora": "5.4.1", "rxjs": "6.6.7" }, "engines": { - "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6", + "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, + "node_modules/@angular-devkit/schematics/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/schematics/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/@angular/animations": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-12.1.5.tgz", - "integrity": "sha512-t17n8RuzkY7lYawmI01WuNWf70ttvEPknmS3sh7q2IAsBdRiLQCBmh6Hw5q0SBaQNoRWNIcUWKBwl4EmyXOtrA==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-13.3.3.tgz", + "integrity": "sha512-rP1e0XYjHxPCnvSN3k0ZCBTfIvpKbFI8fxlZMD85PI9HAko5Dc1Y5XCWrcMzdCF4C5nfqbzfzuZke5H3Y46AVQ==", "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.3.0" }, "engines": { - "node": "^12.14.1 || >=14.0.0" + "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/core": "12.1.5" + "@angular/core": "13.3.3" } }, "node_modules/@angular/cdk": { - "version": "12.2.13", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-12.2.13.tgz", - "integrity": "sha512-zSKRhECyFqhingIeyRInIyTvYErt4gWo+x5DQr0b7YLUbU8DZSwWnG4w76Ke2s4U8T7ry1jpJBHoX/e8YBpGMg==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-13.3.3.tgz", + "integrity": "sha512-dzd31mta2VwffxbeO4CelMqb7WswLnkC/r2QZXySnc0CTmj44HqXkqdZuEvVgxaKRVpxsYeuBuhhhy8U00YMOw==", "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.3.0" }, "optionalDependencies": { "parse5": "^5.0.0" }, "peerDependencies": { - "@angular/common": "^12.0.0 || ^13.0.0-0", - "@angular/core": "^12.0.0 || ^13.0.0-0", - "rxjs": "^6.5.3 || ^7.0.0" + "@angular/common": "^13.0.0 || ^14.0.0-0", + "@angular/core": "^13.0.0 || ^14.0.0-0", + "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/cli": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-12.1.4.tgz", - "integrity": "sha512-LpyhyqWe3bFcuH3MrXeYoIPI1htjwG1b5ehETfq4qsMvNmuFON6QI+F7EWEpX7lItVQc2bES+ogasTZsZue/uw==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.3.3.tgz", + "integrity": "sha512-a+nnzFP1FfnypXpAhrHbIBaJcxzegWLZUvVzJQwt6P2z60IoHdvTVmyNbY89qI0LE1SrAokEUO1zW3Yjmu7fUw==", "dev": true, "hasInstallScript": true, "dependencies": { - "@angular-devkit/architect": "0.1201.4", - "@angular-devkit/core": "12.1.4", - "@angular-devkit/schematics": "12.1.4", - "@schematics/angular": "12.1.4", + "@angular-devkit/architect": "0.1303.3", + "@angular-devkit/core": "13.3.3", + "@angular-devkit/schematics": "13.3.3", + "@schematics/angular": "13.3.3", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", - "debug": "4.3.1", + "debug": "4.3.3", "ini": "2.0.0", - "inquirer": "8.1.1", + "inquirer": "8.2.0", "jsonc-parser": "3.0.0", "npm-package-arg": "8.1.5", "npm-pick-manifest": "6.1.1", - "open": "8.2.1", + "open": "8.4.0", "ora": "5.4.1", - "pacote": "11.3.4", - "resolve": "1.20.0", + "pacote": "12.0.3", + "resolve": "1.22.0", "semver": "7.3.5", "symbol-observable": "4.0.0", "uuid": "8.3.2" }, "bin": { - "ng": "bin/ng" + "ng": "bin/ng.js" }, "engines": { - "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6", + "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, "node_modules/@angular/common": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-12.1.5.tgz", - "integrity": "sha512-xs33eMhV79S85nbH5FVmujKY3OoczloW9oOGRe5tCzxsDDv85hadrB8Mbm3qI5WQ99DNk8M2+P0MW6uiyCAWkQ==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.3.3.tgz", + "integrity": "sha512-W5rZyuilGAA+tHoTbvHHu11efUBssiiX9BKg2rQAwbdnG+hZfNs0ze28Y+2bwjTDkbLsXsQwm30gs2uie7aMyA==", "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.3.0" }, "engines": { - "node": "^12.14.1 || >=14.0.0" + "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/core": "12.1.5", - "rxjs": "^6.5.3" + "@angular/core": "13.3.3", + "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-12.1.5.tgz", - "integrity": "sha512-MBrNCuTFmBiTy+sqmBYRqfBHPBJeONvRWOxHepn/CMtjHJiTZ+PHG61Chu2ySxLBuOZxAGaP4GMcqIc15G742g==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.3.3.tgz", + "integrity": "sha512-Ynv6md2acZSztl1SZ/mZkIgSxGLruAw8OvSb619FsVINUWHTfLraIAY618oO9K2iPuLY4ixL7BR9ymeW4p8kTw==", "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.3.0" }, "engines": { - "node": "^12.14.1 || >=14.0.0" + "node": "^12.20.0 || ^14.15.0 || >=16.10.0" } }, "node_modules/@angular/compiler-cli": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-12.1.5.tgz", - "integrity": "sha512-5YqZ5heKS3G5t3Fg9L26UedNnum8F9yjNDgUq0qvYR2b6nEDOLYgUxuUSRtg6IGDglSgbxpkgkGNd/SHF9Iu8A==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.3.3.tgz", + "integrity": "sha512-mX2fusiRMUWvXEtfFz/G/tnWiM9a+QpLVSPITpobnKUXMD6pgSh4PGsfHplx4Qbmxz6AqwPZ0wUMSDTopcbW+w==", "dev": true, "dependencies": { - "@babel/core": "^7.8.6", - "@babel/types": "^7.8.6", - "canonical-path": "1.0.0", + "@babel/core": "^7.17.2", "chokidar": "^3.0.0", "convert-source-map": "^1.5.1", "dependency-graph": "^0.11.0", - "magic-string": "^0.25.0", - "minimist": "^1.2.0", + "magic-string": "^0.26.0", "reflect-metadata": "^0.1.2", "semver": "^7.0.0", - "source-map": "^0.6.1", "sourcemap-codec": "^1.4.8", - "tslib": "^2.2.0", - "yargs": "^17.0.0" + "tslib": "^2.3.0", + "yargs": "^17.2.1" }, "bin": { - "ivy-ngcc": "ngcc/main-ivy-ngcc.js", - "ng-xi18n": "src/extract_i18n.js", - "ngc": "src/main.js", - "ngcc": "ngcc/main-ngcc.js" + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/main-ngcc.js" }, "engines": { - "node": "^12.14.1 || >=14.0.0" + "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/compiler": "12.1.5", - "typescript": ">=4.2.3 <4.4" + "@angular/compiler": "13.3.3", + "typescript": ">=4.4.2 <4.7" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@ampproject/remapping": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", + "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.9.tgz", + "integrity": "sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.9", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helpers": "^7.17.9", + "@babel/parser": "^7.17.9", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.9", + "@babel/types": "^7.17.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/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==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/generator": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz", + "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@angular/compiler-cli/node_modules/magic-string": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.1.tgz", + "integrity": "sha512-ndThHmvgtieXe8J/VGPjG+Apu7v7ItcD5mhEIvOscWjPF/ccOiLxHaSuCAS2G+3x4GKsAbT8u7zdyamupui8Tg==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + }, + "engines": { + "node": ">=12" } }, "node_modules/@angular/compiler-cli/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==", + "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/@angular/core": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-12.1.5.tgz", - "integrity": "sha512-okXnhAPxfblAWSe5M/IqrSATi+ul83a9o9PWOTFR/XCVcbx+neE2IwIr1dIDKBKj91b1CFalLS+uOSkN05PNkA==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.3.3.tgz", + "integrity": "sha512-zVsAuR1qT2QEUXDk8ANs+pCnxH7ckKAD+rJXoxI1Br94Ey1o7lNXu/GPJtTqxDbsRd7sGqMMQRti36t2CA5QhA==", "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.3.0" }, "engines": { - "node": "^12.14.1 || >=14.0.0" + "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "rxjs": "^6.5.3", + "rxjs": "^6.5.3 || ^7.4.0", "zone.js": "~0.11.4" } }, "node_modules/@angular/forms": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-12.1.5.tgz", - "integrity": "sha512-ABfBRCZYVbR5MUkMNrYU/ovCjXtCedk0h4phzCimGl6hBcpbumT9z/3m0TsY9sQnLq0BaCfKNklnHwCuO9mSSg==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.3.3.tgz", + "integrity": "sha512-C89b7Uu7Acpm+0/JDczIqhNJTEJPdskmnx7AybAoSfBPs9QUSP8irRFKY7UtmE8E/Q2m03xqWRDa8CpP9Rt6Hw==", "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.3.0" }, "engines": { - "node": "^12.14.1 || >=14.0.0" + "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/common": "12.1.5", - "@angular/core": "12.1.5", - "@angular/platform-browser": "12.1.5", - "rxjs": "^6.5.3" + "@angular/common": "13.3.3", + "@angular/core": "13.3.3", + "@angular/platform-browser": "13.3.3", + "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/material": { - "version": "12.2.13", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-12.2.13.tgz", - "integrity": "sha512-6g2GyN4qp2D+DqY2AwrQuPB3cd9gybvQVXvNRbTPXEulHr+LgGei00ySdFHFp6RvdGSMZ4i3LM1Fq3VkFxhCfQ==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-13.3.3.tgz", + "integrity": "sha512-PkZ7VW3/7tqdBHSOOmq7com7Ir147OEe1+kfgF/G3y8WUutI9jY2cHKARXGWB+5WgcqKr7ol43u239UGkPfFHg==", "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/animations": "^12.0.0 || ^13.0.0-0", - "@angular/cdk": "12.2.13", - "@angular/common": "^12.0.0 || ^13.0.0-0", - "@angular/core": "^12.0.0 || ^13.0.0-0", - "@angular/forms": "^12.0.0 || ^13.0.0-0", - "rxjs": "^6.5.3 || ^7.0.0" + "@angular/animations": "^13.0.0 || ^14.0.0-0", + "@angular/cdk": "13.3.3", + "@angular/common": "^13.0.0 || ^14.0.0-0", + "@angular/core": "^13.0.0 || ^14.0.0-0", + "@angular/forms": "^13.0.0 || ^14.0.0-0", + "@angular/platform-browser": "^13.0.0 || ^14.0.0-0", + "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/platform-browser": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-12.1.5.tgz", - "integrity": "sha512-UNlmvCY8cS1/WojCJtgf/EMMN8qdPV1IQa6vZ6/ChQiS38YlH+aQEOCcxtSSfMFmWjaz7j67u55vSlkvA4rApQ==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.3.3.tgz", + "integrity": "sha512-feVOGwjAZOR4aObjcEaXsj1NH6021sv0bWKSGBVNrR0RuHBXVfF0vRPAhdq3IAL1OcutriHGR52KS7t5x+nChw==", "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.3.0" }, "engines": { - "node": "^12.14.1 || >=14.0.0" + "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/animations": "12.1.5", - "@angular/common": "12.1.5", - "@angular/core": "12.1.5" + "@angular/animations": "13.3.3", + "@angular/common": "13.3.3", + "@angular/core": "13.3.3" }, "peerDependenciesMeta": { "@angular/animations": { @@ -481,39 +627,45 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.1.5.tgz", - "integrity": "sha512-4Anc2pRGRnBHzSeWMYOaEs6hUYw09N/WsOg1lHevZ8abwXyo80xOKiZa+kfgFkst0XaY8DzuDQFnj7opcEVdCQ==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.3.3.tgz", + "integrity": "sha512-3sidxYGCRj/OdtYvCNipbNRsXbXgiIZW20exxKG6H2MG4uxfBJ3yh7gFs25rdYJezdxL4/vesHQhKFguBVIgbw==", "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.3.0" }, "engines": { - "node": "^12.14.1 || >=14.0.0" + "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/common": "12.1.5", - "@angular/compiler": "12.1.5", - "@angular/core": "12.1.5", - "@angular/platform-browser": "12.1.5" + "@angular/common": "13.3.3", + "@angular/compiler": "13.3.3", + "@angular/core": "13.3.3", + "@angular/platform-browser": "13.3.3" } }, "node_modules/@angular/router": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-12.1.5.tgz", - "integrity": "sha512-ZZFLcaenVFKCyaxD3mU4cuV4RNFwCEN6JLWmkOFkwIt01RVJcvPaPxiv4pfQf5hnk2HeSciMA0J+UIzSu5YKMA==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.3.3.tgz", + "integrity": "sha512-8RMUPT5eLKgs+I72MD7vBXvdGwhxPzCAmICH6aUkq8qZKnbLh0Qeh4ZLM7xLH+b3HRrrT64fSrKP4CCGwAmA9Q==", "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.3.0" }, "engines": { - "node": "^12.14.1 || >=14.0.0" + "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/common": "12.1.5", - "@angular/core": "12.1.5", - "@angular/platform-browser": "12.1.5", - "rxjs": "^6.5.3" + "@angular/common": "13.3.3", + "@angular/core": "13.3.3", + "@angular/platform-browser": "13.3.3", + "rxjs": "^6.5.3 || ^7.4.0" } }, + "node_modules/@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", + "dev": true + }, "node_modules/@babel/code-frame": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", @@ -527,29 +679,29 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", - "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz", + "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", - "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helpers": "^7.14.6", - "@babel/parser": "^7.14.6", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5", + "version": "7.16.12", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz", + "integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.16.7", + "@babel/parser": "^7.16.12", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.10", + "@babel/types": "^7.16.8", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -584,12 +736,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", + "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", "dev": true, "dependencies": { - "@babel/types": "^7.14.5", + "@babel/types": "^7.16.8", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -607,12 +759,12 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", "dev": true, "dependencies": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -632,12 +784,12 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz", + "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.16.4", + "@babel/compat-data": "^7.17.7", "@babel/helper-validator-option": "^7.16.7", "browserslist": "^4.17.5", "semver": "^6.3.0" @@ -659,15 +811,15 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.7.tgz", - "integrity": "sha512-kIFozAvVfK05DM4EVQYKK+zteWvY85BFdGBRQBytRyY3y+6PX0DkDOn/CZ3lEuczCfrCxEzwt0YtP/87YPTWSw==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz", + "integrity": "sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.7", "@babel/helper-optimise-call-expression": "^7.16.7", "@babel/helper-replace-supers": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7" @@ -679,26 +831,14 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz", - "integrity": "sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", + "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^4.7.1" + "regexpu-core": "^5.0.1" }, "engines": { "node": ">=6.9.0" @@ -707,22 +847,10 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.4.tgz", - "integrity": "sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.13.0", @@ -772,40 +900,13 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", + "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", "dev": true, "dependencies": { - "@babel/helper-get-function-arity": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name/node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.17.0" }, "engines": { "node": ">=6.9.0" @@ -824,12 +925,12 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", - "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", + "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.17.0" }, "engines": { "node": ">=6.9.0" @@ -848,33 +949,19 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", + "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", "@babel/helper-split-export-declaration": "^7.16.7", "@babel/helper-validator-identifier": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" }, "engines": { "node": ">=6.9.0" @@ -915,18 +1002,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-replace-supers": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", @@ -944,12 +1019,12 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", + "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.17.0" }, "engines": { "node": ">=6.9.0" @@ -1012,52 +1087,24 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-wrap-function/node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helpers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", - "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", + "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", "dev": true, "dependencies": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers/node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/traverse": "^7.17.9", + "@babel/types": "^7.17.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", - "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", + "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", @@ -1069,9 +1116,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz", - "integrity": "sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz", + "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -1080,6 +1127,21 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", + "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", @@ -1098,13 +1160,13 @@ } }, "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz", - "integrity": "sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", + "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8", "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { @@ -1131,12 +1193,12 @@ } }, "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz", - "integrity": "sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw==", + "version": "7.17.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz", + "integrity": "sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.17.6", "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, @@ -1244,12 +1306,12 @@ } }, "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz", - "integrity": "sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA==", + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz", + "integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.16.4", + "@babel/compat-data": "^7.17.0", "@babel/helper-compilation-targets": "^7.16.7", "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", @@ -1296,12 +1358,12 @@ } }, "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.7.tgz", - "integrity": "sha512-7twV3pzhrRxSwHeIvFE6coPgvo+exNDOiGUMg39o2LiLo1Y+4aKpfkcLGcg1UHonzorCt7SNXnoMyCnnIOA8Sw==", + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", + "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.16.10", "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { @@ -1329,18 +1391,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-proposal-unicode-property-regex": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", @@ -1550,14 +1600,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", - "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", + "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5" + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8" }, "engines": { "node": ">=6.9.0" @@ -1618,18 +1668,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", @@ -1646,9 +1684,9 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz", - "integrity": "sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz", + "integrity": "sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.16.7" @@ -1787,14 +1825,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", - "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.9.tgz", + "integrity": "sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-module-transforms": "^7.17.7", "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", "babel-plugin-dynamic-import-node": "^2.3.3" }, "engines": { @@ -1805,13 +1843,13 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", - "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz", + "integrity": "sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==", "dev": true, "dependencies": { "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-module-transforms": "^7.17.7", "@babel/helper-plugin-utils": "^7.16.7", "@babel/helper-validator-identifier": "^7.16.7", "babel-plugin-dynamic-import-node": "^2.3.3" @@ -1916,12 +1954,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", - "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.17.9.tgz", + "integrity": "sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ==", "dev": true, "dependencies": { - "regenerator-transform": "^0.14.2" + "regenerator-transform": "^0.15.0" }, "engines": { "node": ">=6.9.0" @@ -1946,16 +1984,16 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz", - "integrity": "sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.10.tgz", + "integrity": "sha512-9nwTiqETv2G7xI4RvXHNfpGdr8pAA+Q/YtN3yLK7OoK7n9OibVm/xymJ838a9A6E/IciOLPj82lZk0fW6O4O7w==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", "semver": "^6.3.0" }, "engines": { @@ -2082,31 +2120,32 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.7.tgz", - "integrity": "sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.14.7", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-async-generator-functions": "^7.14.7", - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-proposal-class-static-block": "^7.14.5", - "@babel/plugin-proposal-dynamic-import": "^7.14.5", - "@babel/plugin-proposal-export-namespace-from": "^7.14.5", - "@babel/plugin-proposal-json-strings": "^7.14.5", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", - "@babel/plugin-proposal-numeric-separator": "^7.14.5", - "@babel/plugin-proposal-object-rest-spread": "^7.14.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-private-methods": "^7.14.5", - "@babel/plugin-proposal-private-property-in-object": "^7.14.5", - "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz", + "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-async-generator-functions": "^7.16.8", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-proposal-class-static-block": "^7.16.7", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.16.7", + "@babel/plugin-proposal-json-strings": "^7.16.7", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.16.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-private-methods": "^7.16.11", + "@babel/plugin-proposal-private-property-in-object": "^7.16.7", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", @@ -2121,44 +2160,44 @@ "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.14.5", - "@babel/plugin-transform-async-to-generator": "^7.14.5", - "@babel/plugin-transform-block-scoped-functions": "^7.14.5", - "@babel/plugin-transform-block-scoping": "^7.14.5", - "@babel/plugin-transform-classes": "^7.14.5", - "@babel/plugin-transform-computed-properties": "^7.14.5", - "@babel/plugin-transform-destructuring": "^7.14.7", - "@babel/plugin-transform-dotall-regex": "^7.14.5", - "@babel/plugin-transform-duplicate-keys": "^7.14.5", - "@babel/plugin-transform-exponentiation-operator": "^7.14.5", - "@babel/plugin-transform-for-of": "^7.14.5", - "@babel/plugin-transform-function-name": "^7.14.5", - "@babel/plugin-transform-literals": "^7.14.5", - "@babel/plugin-transform-member-expression-literals": "^7.14.5", - "@babel/plugin-transform-modules-amd": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.14.5", - "@babel/plugin-transform-modules-systemjs": "^7.14.5", - "@babel/plugin-transform-modules-umd": "^7.14.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.7", - "@babel/plugin-transform-new-target": "^7.14.5", - "@babel/plugin-transform-object-super": "^7.14.5", - "@babel/plugin-transform-parameters": "^7.14.5", - "@babel/plugin-transform-property-literals": "^7.14.5", - "@babel/plugin-transform-regenerator": "^7.14.5", - "@babel/plugin-transform-reserved-words": "^7.14.5", - "@babel/plugin-transform-shorthand-properties": "^7.14.5", - "@babel/plugin-transform-spread": "^7.14.6", - "@babel/plugin-transform-sticky-regex": "^7.14.5", - "@babel/plugin-transform-template-literals": "^7.14.5", - "@babel/plugin-transform-typeof-symbol": "^7.14.5", - "@babel/plugin-transform-unicode-escapes": "^7.14.5", - "@babel/plugin-transform-unicode-regex": "^7.14.5", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "core-js-compat": "^3.15.0", + "@babel/plugin-transform-arrow-functions": "^7.16.7", + "@babel/plugin-transform-async-to-generator": "^7.16.8", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.16.7", + "@babel/plugin-transform-classes": "^7.16.7", + "@babel/plugin-transform-computed-properties": "^7.16.7", + "@babel/plugin-transform-destructuring": "^7.16.7", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.16.7", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.16.7", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.16.7", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.16.7", + "@babel/plugin-transform-modules-commonjs": "^7.16.8", + "@babel/plugin-transform-modules-systemjs": "^7.16.7", + "@babel/plugin-transform-modules-umd": "^7.16.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", + "@babel/plugin-transform-new-target": "^7.16.7", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.16.7", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.16.7", + "@babel/plugin-transform-reserved-words": "^7.16.7", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.16.7", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.16.7", + "@babel/plugin-transform-typeof-symbol": "^7.16.7", + "@babel/plugin-transform-unicode-escapes": "^7.16.7", + "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.8", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.20.2", "semver": "^6.3.0" }, "engines": { @@ -2194,9 +2233,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", - "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", + "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", "dev": true, "dependencies": { "regenerator-runtime": "^0.13.4" @@ -2206,33 +2245,33 @@ } }, "node_modules/@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.8.tgz", - "integrity": "sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.9.tgz", + "integrity": "sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.8", + "@babel/generator": "^7.17.9", "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.8", - "@babel/types": "^7.16.8", + "@babel/parser": "^7.17.9", + "@babel/types": "^7.17.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2241,12 +2280,12 @@ } }, "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", - "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz", + "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==", "dev": true, "dependencies": { - "@babel/types": "^7.16.8", + "@babel/types": "^7.17.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -2264,9 +2303,9 @@ } }, "node_modules/@babel/types": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", - "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", @@ -2276,24 +2315,61 @@ "node": ">=6.9.0" } }, - "node_modules/@csstools/convert-colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", - "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==", + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, "engines": { - "node": ">=4.0.0" + "node": ">=0.1.90" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.3" } }, "node_modules/@discoveryjs/json-ext": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", - "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz", + "integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==", "dev": true, "engines": { "node": ">=10.0.0" } }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, + "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==", + "dev": true, + "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" + } + }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", @@ -2303,17 +2379,29 @@ "node": ">=8" } }, - "node_modules/@jsdevtools/coverage-istanbul-loader": { + "node_modules/@jridgewell/resolve-uri": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz", - "integrity": "sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA==", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", + "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", "dev": true, "dependencies": { - "convert-source-map": "^1.7.0", - "istanbul-lib-instrument": "^4.0.3", - "loader-utils": "^2.0.0", - "merge-source-map": "^1.1.0", - "schema-utils": "^2.7.0" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, "node_modules/@juggle/resize-observer": { @@ -2322,21 +2410,18 @@ "integrity": "sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw==" }, "node_modules/@ngtools/webpack": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-12.1.4.tgz", - "integrity": "sha512-hXc8dTnRfDB7o1Pd7a07aw0rjGmVLXU28+cTHQJliosgD3obcjfZ4QPA0k97vlQMtqVJawuShRfyiUKrpsJf8Q==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.3.3.tgz", + "integrity": "sha512-O6EzafKfFuvI3Ju941u7ANs0mT7YDdChbVRhVECCPWOTm3Klr73js3bnCDzaJlxZNjzlG/KeUu5ghrhbMrHjSw==", "dev": true, - "dependencies": { - "enhanced-resolve": "5.8.2" - }, "engines": { - "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6", + "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "peerDependencies": { - "@angular/compiler-cli": "^12.0.0 || ^12.1.0-next", - "typescript": "~4.2.3 || ~4.3.2", + "@angular/compiler-cli": "^13.0.0", + "typescript": ">=4.4.3 <4.7", "webpack": "^5.30.0" } }, @@ -2375,6 +2460,16 @@ "node": ">= 8" } }, + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "dev": true, + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, "node_modules/@npmcli/git": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", @@ -2451,30 +2546,30 @@ } }, "node_modules/@npmcli/run-script": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.6.tgz", - "integrity": "sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-2.0.0.tgz", + "integrity": "sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig==", "dev": true, "dependencies": { "@npmcli/node-gyp": "^1.0.2", "@npmcli/promise-spawn": "^1.3.2", - "node-gyp": "^7.1.0", + "node-gyp": "^8.2.0", "read-package-json-fast": "^2.0.1" } }, "node_modules/@schematics/angular": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-12.1.4.tgz", - "integrity": "sha512-xGqgGI6GWk4EFdKis8FmSESxoLgjnLQbaRE1t1KZCkSKJzqkOj0R9wiDrtZfcrbPxIkLL+3fAk2ThwwPznT6yw==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.3.tgz", + "integrity": "sha512-kX5ghVCmWHcMN+g0pUaFuIJzwrXsVnK4bfid8DckU4EEtfFSv3UA5I1QNJRgpCPxTPhNEAk+3ePN8nzDSjdU+w==", "dev": true, "dependencies": { - "@angular-devkit/core": "12.1.4", - "@angular-devkit/schematics": "12.1.4", + "@angular-devkit/core": "13.3.3", + "@angular-devkit/schematics": "13.3.3", "jsonc-parser": "3.0.0" }, "engines": { - "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6", + "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, @@ -2496,13 +2591,23 @@ "node": ">= 6" } }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", "dev": true, - "engines": { - "node": ">=10.13.0" + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "dependencies": { + "@types/node": "*" } }, "node_modules/@types/component-emitter": { @@ -2511,6 +2616,25 @@ "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==", "dev": true }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, "node_modules/@types/cookie": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", @@ -2524,9 +2648,9 @@ "dev": true }, "node_modules/@types/eslint": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.2.tgz", - "integrity": "sha512-nQxgB8/Sg+QKhnV8e0WzPpxjIGT3tuJDDzybkDi8ItE/IgTlHo07U0shaIjzhcvQxlq9SDRE42lsJ23uvEgJ2A==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", + "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", "dev": true, "dependencies": { "@types/estree": "*", @@ -2544,43 +2668,65 @@ } }, "node_modules/@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", "dev": true }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "node_modules/@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.28", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", + "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/http-proxy": { + "version": "1.17.8", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", + "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", "dev": true, "dependencies": { - "@types/minimatch": "*", "@types/node": "*" } }, "node_modules/@types/jasmine": { - "version": "3.6.11", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.6.11.tgz", - "integrity": "sha512-S6pvzQDvMZHrkBz2Mcn/8Du7cpr76PlRJBAoHnSDNbulULsH5dp0Gns+WRyNX5LHejz/ljxK4/vIHK/caHt6SQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.0.2.tgz", + "integrity": "sha512-mSPIWhDyQ4nzYdR6Ixy15VhVKMVw93mSUlQxxpVb4S9Hj90lBvg+7kkBw23uYcv8CESPPXit+u3cARYcPeC8Jg==", "dev": true }, "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "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/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, "node_modules/@types/node": { - "version": "12.20.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.42.tgz", - "integrity": "sha512-aI3/oo5DzyiI5R/xAhxxRzfZlWlsbbqdgxfTPkqu/Zt+23GXiJvMCyPJT4+xKSXOnLqoL8jJYMLTwvK2M3a5hw==", + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", + "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", "dev": true }, "node_modules/@types/parse-json": { @@ -2589,30 +2735,59 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, - "node_modules/@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", + "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", "dev": true }, - "node_modules/@types/webpack-sources": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.9.tgz", - "integrity": "sha512-bvzMnzqoK16PQIC8AYHNdW45eREJQMd6WG/msQWX5V2+vZmODCOPb4TJcbgRljTZZTwTM4wUMcsI8FftNA7new==", + "node_modules/@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", "dev": true, "dependencies": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.6.1" + "@types/express": "*" } }, - "node_modules/@types/webpack-sources/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==", + "node_modules/@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "dev": true, + "dependencies": { + "@types/node": "*" } }, "node_modules/@webassemblyjs/ast": { @@ -2792,13 +2967,13 @@ "dev": true }, "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { "node": ">= 0.6" @@ -2816,6 +2991,15 @@ "node": ">=0.4.0" } }, + "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, + "peerDependencies": { + "acorn": "^8" + } + }, "node_modules/adjust-sourcemap-loader": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", @@ -2829,6 +3013,20 @@ "node": ">=8.9" } }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -2842,9 +3040,9 @@ } }, "node_modules/agentkeepalive": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.0.tgz", - "integrity": "sha512-0PhAp58jZNw13UJv7NVdTGb0ZcghHUb3DrZ046JiiJY/BOaTTpbwdHq2VObPCBV8M2GPh7sgrJ3AQ8Ey468LJw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", "dev": true, "dependencies": { "debug": "^4.1.0", @@ -2855,8 +3053,17 @@ "node": ">= 8.0.0" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", + "node_modules/agentkeepalive/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, @@ -2869,9 +3076,9 @@ } }, "node_modules/ajv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.0.tgz", - "integrity": "sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -2884,19 +3091,10 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true, - "peerDependencies": { - "ajv": ">=5.0.0" - } - }, "node_modules/ajv-formats": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.0.tgz", - "integrity": "sha512-USH2jBb+C/hIpwD2iRjp0pe0k+MvzG0mlSn/FIdCgQhUb9ALPRjt2KIQdfZDS9r0ZIeUAg7gOu9KL0PFqGqr5Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "dependencies": { "ajv": "^8.0.0" @@ -2910,11 +3108,17 @@ } } }, - "node_modules/alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } }, "node_modules/ansi-colors": { "version": "4.1.1", @@ -2940,10 +3144,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true, "engines": [ "node >= 0.8.0" @@ -2987,70 +3191,31 @@ } }, "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true }, "node_modules/are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz", + "integrity": "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==", "dev": true, "dependencies": { "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/are-we-there-yet/node_modules/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==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/are-we-there-yet/node_modules/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==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.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" - } - }, - "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, + "readable-stream": "^3.6.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^12.13.0 || ^14.15.0 || >=16" } }, - "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=", + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "sprintf-js": "~1.0.2" } }, "node_modules/array-flatten": { @@ -3060,86 +3225,26 @@ "dev": true }, "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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" - } - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "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=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", + "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, "dependencies": { "lodash": "^4.17.14" } }, - "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "node_modules/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==", - "dev": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, "node_modules/atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", @@ -3153,78 +3258,42 @@ } }, "node_modules/autoprefixer": { - "version": "9.8.8", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", - "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "version": "10.4.4", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.4.tgz", + "integrity": "sha512-Tm8JxsB286VweiZ5F0anmbyGiNI3v3wGv3mz9W+cxEDYB/6jbnj6GM9H9mK3wIL8ftgl+C07Lcwb8PG5PCCPzA==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], "dependencies": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", + "browserslist": "^4.20.2", + "caniuse-lite": "^1.0.30001317", + "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "picocolors": "^0.2.1", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" }, "bin": { "autoprefixer": "bin/autoprefixer" }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - }, - "node_modules/autoprefixer/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/autoprefixer/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, "engines": { - "node": ">=6.0.0" + "node": "^10 || ^12 || >=14" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/autoprefixer/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==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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=", - "dev": true, - "engines": { - "node": "*" + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, "node_modules/babel-loader": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", - "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", + "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", "dev": true, "dependencies": { "find-cache-dir": "^3.3.1", @@ -3275,14 +3344,30 @@ "object.assign": "^4.1.0" } }, + "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==", + "dev": true, + "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/babel-plugin-polyfill-corejs2": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.3.tgz", - "integrity": "sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", "dev": true, "dependencies": { "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.4", + "@babel/helper-define-polyfill-provider": "^0.3.1", "semver": "^6.1.1" }, "peerDependencies": { @@ -3299,25 +3384,25 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz", - "integrity": "sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.16.2" + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.3.tgz", - "integrity": "sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.4" + "@babel/helper-define-polyfill-provider": "^0.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -3329,36 +3414,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "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" - } - }, - "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" - } - }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -3394,15 +3449,6 @@ "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", "dev": true }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -3421,16 +3467,6 @@ "node": ">=8" } }, - "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" - } - }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -3443,24 +3479,27 @@ } }, "node_modules/body-parser": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", - "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", "dev": true, "dependencies": { - "bytes": "3.1.1", + "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.6", - "raw-body": "2.4.2", - "type-is": "~1.6.18" + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/body-parser/node_modules/debug": { @@ -3521,15 +3560,25 @@ } }, "node_modules/browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "version": "4.20.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", + "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], "dependencies": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", "escalade": "^3.1.1", - "node-releases": "^2.0.1", + "node-releases": "^2.0.2", "picocolors": "^1.0.0" }, "bin": { @@ -3537,10 +3586,6 @@ }, "engines": { "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" } }, "node_modules/buffer": { @@ -3586,20 +3631,21 @@ "dev": true }, "node_modules/bytes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/cacache": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.2.0.tgz", - "integrity": "sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw==", + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", "dev": true, "dependencies": { + "@npmcli/fs": "^1.0.0", "@npmcli/move-file": "^1.0.1", "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -3622,26 +3668,6 @@ "node": ">= 10" } }, - "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" - } - }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -3678,39 +3704,21 @@ "resolved": "https://registry.npmjs.org/can-use-dom/-/can-use-dom-0.1.0.tgz", "integrity": "sha1-IsxKNKCrxDlQ9CxkEQJKP2NmtFo=" }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, "node_modules/caniuse-lite": { - "version": "1.0.30001300", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001300.tgz", - "integrity": "sha512-cVjiJHWGcNlJi8TZVKNMnvMid3Z3TTdDHmLDzlOdIiZq138Exvo0G+G0wTdVYolxKb4AYwC+38pxodiInVtJSA==", + "version": "1.0.30001332", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz", + "integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==", "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/canonical-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz", - "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", - "dev": true - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] }, "node_modules/chalk": { "version": "2.4.2", @@ -3733,10 +3741,16 @@ "dev": true }, "node_modules/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -3783,108 +3797,10 @@ "webpack": ">=4.0.1" } }, - "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" - } - }, - "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" - } - }, - "node_modules/class-utils/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/class-utils/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/class-utils/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/class-utils/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/class-utils/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/class-utils/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/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, "engines": { "node": ">=6" @@ -3957,28 +3873,6 @@ "node": ">=6" } }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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", @@ -3994,47 +3888,20 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "node_modules/colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", - "dev": true - }, - "node_modules/colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", - "dev": true - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "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==", + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" + "bin": { + "color-support": "bin.js" } }, - "node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } + "node_modules/colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true }, "node_modules/commondir": { "version": "1.0.1", @@ -4204,9 +4071,9 @@ } }, "node_modules/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true, "engines": { "node": ">= 0.6" @@ -4219,39 +4086,32 @@ "dev": true }, "node_modules/copy-anything": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.3.tgz", - "integrity": "sha512-GK6QUtisv4fNS+XcI7shX0Gx9ORg7QqIznyfho79JTnX1XhLiyZHfftvGiziqzRiEi/Bjhgpi+D2o7HxJFPnDQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", "dev": true, "dependencies": { - "is-what": "^3.12.0" - } - }, - "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" + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" } }, "node_modules/copy-webpack-plugin": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.0.tgz", - "integrity": "sha512-k8UB2jLIb1Jip2nZbCz83T/XfhfjX6mB1yLJNYKrpYi7FQimfOoFv/0//iT6HV1K8FwUB5yUbCcnpLebJXJTug==", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.1.tgz", + "integrity": "sha512-nr81NhCAIpAWXGCK5thrKmfCQ6GDY0L5RN0U+BnIn/7Us55+UCex5ANNsNKmIVtDRnk0Ecf+/kzp9SUVrrBMLg==", "dev": true, "dependencies": { - "fast-glob": "^3.2.5", - "glob-parent": "^6.0.0", - "globby": "^11.0.3", + "fast-glob": "^3.2.7", + "glob-parent": "^6.0.1", + "globby": "^12.0.2", "normalize-path": "^3.0.0", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1" + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 12.20.0" }, "funding": { "type": "opencollective", @@ -4261,31 +4121,6 @@ "webpack": "^5.1.0" } }, - "node_modules/copy-webpack-plugin/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" - } - }, - "node_modules/copy-webpack-plugin/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" - } - }, "node_modules/copy-webpack-plugin/node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -4298,24 +4133,19 @@ "node": ">=10.13.0" } }, - "node_modules/copy-webpack-plugin/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/copy-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==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", @@ -4323,9 +4153,9 @@ } }, "node_modules/core-js": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.15.1.tgz", - "integrity": "sha512-h8VbZYnc9pDzueiS2610IULDkpFFPunHwIpl8yRwFahAEEdSpHlTy3h3z3rKq5h11CaUdBEeRViu9AYvbxiMeg==", + "version": "3.20.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.20.3.tgz", + "integrity": "sha512-vVl8j8ph6tRS3B8qir40H7yw7voy17xL0piAjlbBUsH7WIfzoedL/ZOr1OV9FyZQLWXsayOJyV4tnRyXR85/ag==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -4333,9 +4163,9 @@ } }, "node_modules/core-js-compat": { - "version": "3.20.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.3.tgz", - "integrity": "sha512-c8M5h0IkNZ+I92QhIpuSijOxGAcj3lgpsWdkCqmUTZNwidujF4r3pi6x1DCN+Vcs5qTS2XWWMfWSuCqyupX8gw==", + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz", + "integrity": "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==", "dev": true, "dependencies": { "browserslist": "^4.19.1", @@ -4356,9 +4186,9 @@ } }, "node_modules/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=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, "node_modules/cors": { @@ -4391,15 +4221,16 @@ } }, "node_modules/critters": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.10.tgz", - "integrity": "sha512-p5VKhP1803+f+0Jq5P03w1SbiHtpAKm+1EpJHkiPxQPq0Vu9QLZHviJ02GRrWi0dlcJqrmzMWInbwp4d22RsGw==", + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.16.tgz", + "integrity": "sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A==", "dev": true, "dependencies": { "chalk": "^4.1.0", - "css": "^3.0.0", + "css-select": "^4.2.0", "parse5": "^6.0.1", "parse5-htmlparser2-tree-adapter": "^6.0.1", + "postcss": "^8.3.7", "pretty-bytes": "^5.3.0" } }, @@ -4480,28 +4311,32 @@ } }, "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==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "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" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=4.8" + "node": ">= 8" } }, - "node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, "bin": { - "semver": "bin/semver" + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, "node_modules/css": { @@ -4516,133 +4351,111 @@ } }, "node_modules/css-blank-pseudo": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", - "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", "dev": true, "dependencies": { - "postcss": "^7.0.5" + "postcss-selector-parser": "^6.0.9" }, "bin": { - "css-blank-pseudo": "cli.js" + "css-blank-pseudo": "dist/cli.cjs" }, "engines": { - "node": ">=6.0.0" + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/css-blank-pseudo/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/css-blank-pseudo/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/css-has-pseudo": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "postcss-selector-parser": "^6.0.9" }, - "engines": { - "node": ">=6.0.0" + "bin": { + "css-has-pseudo": "dist/cli.cjs" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/css-blank-pseudo/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==", - "dev": true, "engines": { - "node": ">=0.10.0" + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/css-declaration-sorter": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.4.tgz", - "integrity": "sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw==", + "node_modules/css-loader": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.5.1.tgz", + "integrity": "sha512-gEy2w9AnJNnD9Kuo4XAP9VflW/ujKoS9c/syO+uWMlm5igc7LysKzPXaDoR2vroROkSwsTS2tGr1yGGEbZOYZQ==", "dev": true, "dependencies": { - "timsort": "^0.3.0" + "icss-utils": "^5.1.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "semver": "^7.3.5" }, "engines": { - "node": ">= 10" + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "postcss": "^8.0.9" + "webpack": "^5.0.0" } }, - "node_modules/css-has-pseudo": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", - "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", + "node_modules/css-prefers-color-scheme": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", "dev": true, - "dependencies": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^5.0.0-rc.4" - }, "bin": { - "css-has-pseudo": "cli.js" + "css-prefers-color-scheme": "dist/cli.cjs" }, "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/css-has-pseudo/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" + "node": "^12 || ^14 || >=16" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/css-has-pseudo/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/css-has-pseudo/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true, - "dependencies": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, "engines": { - "node": ">=4" + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/css-has-pseudo/node_modules/source-map": { + "node_modules/css/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==", @@ -4651,986 +4464,848 @@ "node": ">=0.10.0" } }, - "node_modules/css-loader": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.6.tgz", - "integrity": "sha512-0wyN5vXMQZu6BvjbrPdUJvkCzGEO24HC7IS7nW4llc6BBFC+zwR9CKtYGv63Puzsg10L/o12inMY5/2ByzfD6w==", - "dev": true, - "dependencies": { - "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.15", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.27.0 || ^5.0.0" - } + "node_modules/cssdb": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-5.1.0.tgz", + "integrity": "sha512-/vqjXhv1x9eGkE/zO6o8ZOI7dgdZbLVLUGyVRbPgk6YipXbW87YzUCcO+Jrmi5bwJlAH6oD+MNeZyRgXea1GZw==", + "dev": true }, - "node_modules/css-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "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" + "bin": { + "cssesc": "bin/cssesc" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/css-loader/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" + "engines": { + "node": ">=4" } }, - "node_modules/css-loader/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==", + "node_modules/custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", "dev": true }, - "node_modules/css-loader/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==", + "node_modules/date-format": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.6.tgz", + "integrity": "sha512-B9vvg5rHuQ8cbUXE/RMWMyX2YA5TecT3jKF5fLtGNlzPlU7zblSPmAm2OImDbWL+LDOQ6pUm+4LOFz+ywS41Zw==", "dev": 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": ">=4.0" } }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.0.1.tgz", - "integrity": "sha512-RGFIv6iZWUPO2T1vE5+5pNCSs2H2xtHYRdfZPiiNH8Of6QOn9BeFnZSoHiQMkmsxOO/JkPe4BpKfs7slFIWcTA==", + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "dependencies": { - "cssnano": "^5.0.0", - "jest-worker": "^27.0.2", - "p-limit": "^3.0.2", - "postcss": "^8.2.9", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1" + "ms": "2.1.2" }, "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" + "node": ">=6.0" }, "peerDependenciesMeta": { - "clean-css": { - "optional": true - }, - "csso": { + "supports-color": { "optional": true } } }, - "node_modules/css-minimizer-webpack-plugin/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" - } - }, - "node_modules/css-minimizer-webpack-plugin/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==", + "node_modules/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=", "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" + "engines": { + "node": ">=0.10" } }, - "node_modules/css-minimizer-webpack-plugin/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/css-minimizer-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==", + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/css-minimizer-webpack-plugin/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==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/css-parse": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-2.0.0.tgz", - "integrity": "sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q=", + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, "dependencies": { - "css": "^2.0.0" + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" } }, - "node_modules/css-parse/node_modules/css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dev": true, "dependencies": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" + "clone": "^1.0.2" } }, - "node_modules/css-parse/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==", + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-parse/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": ">=8" } }, - "node_modules/css-prefers-color-scheme": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", - "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", + "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": { - "postcss": "^7.0.5" - }, - "bin": { - "css-prefers-color-scheme": "cli.js" + "object-keys": "^1.0.12" }, "engines": { - "node": ">=6.0.0" + "node": ">= 0.4" } }, - "node_modules/css-prefers-color-scheme/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/css-prefers-color-scheme/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/css-prefers-color-scheme/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==", + "node_modules/del/node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/css-select": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", - "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", + "node_modules/del/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^5.1.0", - "domhandler": "^4.3.0", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/fb55" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "node_modules/del/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/css-tree/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==", + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/css-what": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "node_modules/dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", "dev": true, "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "node": ">= 0.6.0" } }, - "node_modules/css/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==", + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/cssdb": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", - "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==", + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "node_modules/di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "bin": { - "cssesc": "bin/cssesc" + "dependencies": { + "path-type": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/cssnano": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.15.tgz", - "integrity": "sha512-ppZsS7oPpi2sfiyV5+i+NbB/3GtQ+ab2Vs1azrZaXWujUSN4o+WdTxlCZIMcT9yLW3VO/5yX3vpyDaQ1nIn8CQ==", + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "node_modules/dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", "dev": true, "dependencies": { - "cssnano-preset-default": "^5.1.10", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.1.10", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.10.tgz", - "integrity": "sha512-BcpSzUVygHMOnp9uG5rfPzTOCb0GAHQkqtUQx8j1oMNF9A1Q8hziOOhiM4bdICpmrBIU85BE64RD5XGYsVQZNA==", - "dev": true, - "dependencies": { - "css-declaration-sorter": "^6.0.3", - "cssnano-utils": "^3.0.0", - "postcss-calc": "^8.2.0", - "postcss-colormin": "^5.2.3", - "postcss-convert-values": "^5.0.2", - "postcss-discard-comments": "^5.0.1", - "postcss-discard-duplicates": "^5.0.1", - "postcss-discard-empty": "^5.0.1", - "postcss-discard-overridden": "^5.0.2", - "postcss-merge-longhand": "^5.0.4", - "postcss-merge-rules": "^5.0.4", - "postcss-minify-font-values": "^5.0.2", - "postcss-minify-gradients": "^5.0.4", - "postcss-minify-params": "^5.0.3", - "postcss-minify-selectors": "^5.1.1", - "postcss-normalize-charset": "^5.0.1", - "postcss-normalize-display-values": "^5.0.2", - "postcss-normalize-positions": "^5.0.2", - "postcss-normalize-repeat-style": "^5.0.2", - "postcss-normalize-string": "^5.0.2", - "postcss-normalize-timing-functions": "^5.0.2", - "postcss-normalize-unicode": "^5.0.2", - "postcss-normalize-url": "^5.0.4", - "postcss-normalize-whitespace": "^5.0.2", - "postcss-ordered-values": "^5.0.3", - "postcss-reduce-initial": "^5.0.2", - "postcss-reduce-transforms": "^5.0.2", - "postcss-svgo": "^5.0.3", - "postcss-unique-selectors": "^5.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" } }, - "node_modules/cssnano-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.0.tgz", - "integrity": "sha512-Pzs7/BZ6OgT+tXXuF12DKR8SmSbzUeVYCtMBbS8lI0uAm3mrYmkyqCXXPsQESI6kmLfEVBppbdVY/el3hg3nAA==", + "node_modules/dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "dependencies": { + "buffer-indexof": "^1.0.0" } }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "node_modules/dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", "dev": true, "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" } }, - "node_modules/custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "dev": true - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, "dependencies": { - "assert-plus": "^1.0.0" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" }, - "engines": { - "node": ">=0.10" + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/date-format": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", - "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==", + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true, - "engines": { - "node": ">=4.0" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] }, - "node_modules/debug": { + "node_modules/domhandler": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, "dependencies": { - "ms": "2.1.2" + "domelementtype": "^2.2.0" }, "engines": { - "node": ">=6.0" + "node": ">= 4" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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=", - "dev": true, - "engines": { - "node": ">=0.10" + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.107", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.107.tgz", + "integrity": "sha512-Huen6taaVrUrSy8o7mGStByba8PfOWWluHNxSHGBrCgEdFVLtvdQDBr9LBCF9Uci8SYxh28QNNMO0oC17wbGAg==", + "dev": true + }, + "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/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true, - "dependencies": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - }, "engines": { - "node": ">=6" + "node": ">= 4" } }, - "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true, - "dependencies": { - "clone": "^1.0.2" + "engines": { + "node": ">= 0.8" } }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, - "engines": { - "node": ">=8" + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" } }, - "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==", + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "optional": true, "dependencies": { - "object-keys": "^1.0.12" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "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==", + "node_modules/engine.io": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.3.tgz", + "integrity": "sha512-rqs60YwkvWTLLnfazqgZqLa/aKo+9cueVfEi/dZ8PyGyaf8TLOxj++4QMIgeG3Gn0AhrWiFXvghsoY9L9h25GA==", "dev": true, "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3" }, "engines": { - "node": ">=0.10.0" + "node": ">=10.0.0" } }, - "node_modules/del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "node_modules/engine.io-parser": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", + "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", "dev": true, "dependencies": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" + "@socket.io/base64-arraybuffer": "~1.0.2" }, "engines": { - "node": ">=6" + "node": ">=10.0.0" } }, - "node_modules/del/node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "node_modules/enhanced-resolve": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", + "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==", "dev": true, "dependencies": { - "array-uniq": "^1.0.1" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" } }, - "node_modules/del/node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true }, - "node_modules/del/node_modules/globby/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/del/node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, "engines": { "node": ">=6" } }, - "node_modules/del/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/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true }, - "node_modules/del/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, + "optional": true, "dependencies": { - "glob": "^7.1.3" + "prr": "~1.0.1" }, "bin": { - "rimraf": "bin.js" + "errno": "cli.js" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "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==", "dev": true, - "engines": { - "node": ">=0.4.0" + "dependencies": { + "is-arrayish": "^0.2.1" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "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 }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "node_modules/esbuild": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.22.tgz", + "integrity": "sha512-CjFCFGgYtbFOPrwZNJf7wsuzesx8kqwAffOlbYcFDLFuUtP8xloK1GH+Ai13Qr0RZQf9tE7LMTHJ2iVGJ1SKZA==", "dev": true, + "hasInstallScript": true, + "optional": true, + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { - "node": ">= 0.6" + "node": ">=12" + }, + "optionalDependencies": { + "esbuild-android-arm64": "0.14.22", + "esbuild-darwin-64": "0.14.22", + "esbuild-darwin-arm64": "0.14.22", + "esbuild-freebsd-64": "0.14.22", + "esbuild-freebsd-arm64": "0.14.22", + "esbuild-linux-32": "0.14.22", + "esbuild-linux-64": "0.14.22", + "esbuild-linux-arm": "0.14.22", + "esbuild-linux-arm64": "0.14.22", + "esbuild-linux-mips64le": "0.14.22", + "esbuild-linux-ppc64le": "0.14.22", + "esbuild-linux-riscv64": "0.14.22", + "esbuild-linux-s390x": "0.14.22", + "esbuild-netbsd-64": "0.14.22", + "esbuild-openbsd-64": "0.14.22", + "esbuild-sunos-64": "0.14.22", + "esbuild-windows-32": "0.14.22", + "esbuild-windows-64": "0.14.22", + "esbuild-windows-arm64": "0.14.22" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.22.tgz", + "integrity": "sha512-k1Uu4uC4UOFgrnTj2zuj75EswFSEBK+H6lT70/DdS4mTAOfs2ECv2I9ZYvr3w0WL0T4YItzJdK7fPNxcPw6YmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "node_modules/esbuild-darwin-64": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.22.tgz", + "integrity": "sha512-d8Ceuo6Vw6HM3fW218FB6jTY6O3r2WNcTAU0SGsBkXZ3k8SDoRLd3Nrc//EqzdgYnzDNMNtrWegK2Qsss4THhw==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 0.6.0" + "node": ">=12" } }, - "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "node_modules/di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "dev": true - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.22.tgz", + "integrity": "sha512-YAt9Tj3SkIUkswuzHxkaNlT9+sg0xvzDvE75LlBo4DI++ogSgSmKNR6B4eUhU5EUUepVXcXdRIdqMq9ppeRqfw==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true + "node_modules/esbuild-freebsd-64": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.22.tgz", + "integrity": "sha512-ek1HUv7fkXMy87Qm2G4IRohN+Qux4IcnrDBPZGXNN33KAL0pEJJzdTv0hB/42+DCYWylSrSKxk3KUXfqXOoH4A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.22.tgz", + "integrity": "sha512-zPh9SzjRvr9FwsouNYTqgqFlsMIW07O8mNXulGeQx6O5ApgGUBZBgtzSlBQXkHi18WjrosYfsvp5nzOKiWzkjQ==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "node_modules/esbuild-linux-32": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.22.tgz", + "integrity": "sha512-SnpveoE4nzjb9t2hqCIzzTWBM0RzcCINDMBB67H6OXIuDa4KqFqaIgmTchNA9pJKOVLVIKd5FYxNiJStli21qg==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "buffer-indexof": "^1.0.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "node_modules/esbuild-linux-64": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.22.tgz", + "integrity": "sha512-Zcl9Wg7gKhOWWNqAjygyqzB+fJa19glgl2JG7GtuxHyL1uEnWlpSMytTLMqtfbmRykIHdab797IOZeKwk5g0zg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "node_modules/esbuild-linux-arm": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.22.tgz", + "integrity": "sha512-soPDdbpt/C0XvOOK45p4EFt8HbH5g+0uHs5nUKjHVExfgR7du734kEkXR/mE5zmjrlymk5AA79I0VIvj90WZ4g==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "node_modules/esbuild-linux-arm64": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.22.tgz", + "integrity": "sha512-8q/FRBJtV5IHnQChO3LHh/Jf7KLrxJ/RCTGdBvlVZhBde+dk3/qS9fFsUy+rs3dEi49aAsyVitTwlKw1SUFm+A==", + "cpu": [ + "arm64" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/domhandler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", - "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.22.tgz", + "integrity": "sha512-SiNDfuRXhGh1JQLLA9JPprBgPVFOsGuQ0yDfSPTNxztmVJd8W2mX++c4FfLpAwxuJe183mLuKf7qKCHQs5ZnBQ==", + "cpu": [ + "mips64el" + ], "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "node": ">=12" } }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.22.tgz", + "integrity": "sha512-6t/GI9I+3o1EFm2AyN9+TsjdgWCpg2nwniEhjm2qJWtJyJ5VzTXGUU3alCO3evopu8G0hN2Bu1Jhz2YmZD0kng==", + "cpu": [ + "ppc64" + ], "dev": true, - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.22.tgz", + "integrity": "sha512-AyJHipZKe88sc+tp5layovquw5cvz45QXw5SaDgAq2M911wLHiCvDtf/07oDx8eweCyzYzG5Y39Ih568amMTCQ==", + "cpu": [ + "riscv64" + ], "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.46", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.46.tgz", - "integrity": "sha512-UtV0xUA/dibCKKP2JMxOpDtXR74zABevuUEH4K0tvduFSIoxRVcYmQsbB51kXsFTX8MmOyWMt8tuZAlmDOqkrQ==", - "dev": true - }, - "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/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "node_modules/esbuild-linux-s390x": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.22.tgz", + "integrity": "sha512-Sz1NjZewTIXSblQDZWEFZYjOK6p8tV6hrshYdXZ0NHTjWE+lwxpOpWeElUGtEmiPcMT71FiuA9ODplqzzSxkzw==", + "cpu": [ + "s390x" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 4" + "node": ">=12" } }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "node_modules/esbuild-netbsd-64": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.22.tgz", + "integrity": "sha512-TBbCtx+k32xydImsHxvFgsOCuFqCTGIxhzRNbgSL1Z2CKhzxwT92kQMhxort9N/fZM2CkRCPPs5wzQSamtzEHA==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">= 0.8" + "node": ">=12" } }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "node_modules/esbuild-openbsd-64": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.22.tgz", + "integrity": "sha512-vK912As725haT313ANZZZN+0EysEEQXWC/+YE4rQvOQzLuxAQc2tjbzlAFREx3C8+uMuZj/q7E5gyVB7TzpcTA==", + "cpu": [ + "x64" + ], "dev": true, "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/esbuild-sunos-64": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.22.tgz", + "integrity": "sha512-/mbJdXTW7MTcsPhtfDsDyPEOju9EOABvCjeUU2OJ7fWpX/Em/H3WYDa86tzLUbcVg++BScQDzqV/7RYw5XNY0g==", + "cpu": [ + "x64" + ], "dev": true, "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, + "os": [ + "sunos" + ], "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "once": "^1.4.0" + "node": ">=12" } }, - "node_modules/engine.io": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.1.tgz", - "integrity": "sha512-AyMc20q8JUUdvKd46+thc9o7yCZ6iC6MoBCChG5Z1XmFMpp+2+y/oKvwpZTUJB0KCjxScw1dV9c2h5pjiYBLuQ==", + "node_modules/esbuild-wasm": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.22.tgz", + "integrity": "sha512-FOSAM29GN1fWusw0oLMv6JYhoheDIh5+atC72TkJKfIUMID6yISlicoQSd9gsNSFsNBvABvtE2jR4JB1j4FkFw==", "dev": true, - "dependencies": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.0", - "ws": "~8.2.3" + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=10.0.0" + "node": ">=12" } }, - "node_modules/engine.io-parser": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", - "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", + "node_modules/esbuild-windows-32": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.22.tgz", + "integrity": "sha512-1vRIkuvPTjeSVK3diVrnMLSbkuE36jxA+8zGLUOrT4bb7E/JZvDRhvtbWXWaveUc/7LbhaNFhHNvfPuSw2QOQg==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "@socket.io/base64-arraybuffer": "~1.0.2" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=10.0.0" + "node": ">=12" } }, - "node_modules/enhanced-resolve": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", - "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", + "node_modules/esbuild-windows-64": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.22.tgz", + "integrity": "sha512-AxjIDcOmx17vr31C5hp20HIwz1MymtMjKqX4qL6whPj0dT9lwxPexmLj6G1CpR3vFhui6m75EnBEe4QL82SYqw==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "dev": true - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "node": ">=12" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "node_modules/esbuild-windows-arm64": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.22.tgz", + "integrity": "sha512-5wvQ+39tHmRhNpu2Fx04l7QfeK3mQ9tKzDqqGR8n/4WUxsFxnVLfDRBGirIfk4AfWlxk60kqirlODPoT5LqMUg==", + "cpu": [ + "arm64" + ], "dev": true, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=6" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "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==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" + "node": ">=12" } }, - "node_modules/es-module-lexer": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.7.1.tgz", - "integrity": "sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw==", - "dev": true - }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -5668,6 +5343,19 @@ "node": ">=8.0.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==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -5716,6 +5404,12 @@ "node": ">= 0.6" } }, + "node_modules/eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", + "dev": true + }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -5731,55 +5425,98 @@ "node": ">=0.8.x" } }, - "node_modules/eventsource": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", - "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "dependencies": { - "original": "^1.0.0" + "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": ">=0.12.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "node_modules/express": { + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", + "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", "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" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.19.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.4.2", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.9.7", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "engines": { - "node": ">=6" + "node": ">= 0.10.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=", + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", "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" + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.9.7", + "raw-body": "2.4.3", + "type-is": "~1.6.18" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/expand-brackets/node_modules/debug": { + "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", @@ -5788,178 +5525,76 @@ "ms": "2.0.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=", + "node_modules/express/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "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=", + "node_modules/express/node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/expand-brackets/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=", + "node_modules/express/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/express/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "ee-first": "1.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/expand-brackets/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=", + "node_modules/express/node_modules/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, "engines": { - "node": ">=0.10.0" + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/expand-brackets/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=", + "node_modules/express/node_modules/raw-body": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", + "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/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/expand-brackets/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/expand-brackets/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=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/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/expand-brackets/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/express": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", - "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", - "dev": true, - "dependencies": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.4.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.9.6", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.17.2", - "serve-static": "1.14.2", - "setprototypeof": "1.2.0", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "bytes": "3.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "node_modules/express/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": ">= 0.8" } }, - "node_modules/express/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/express/node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -5986,19 +5621,6 @@ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, - "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/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -6013,67 +5635,6 @@ "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-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -6138,13 +5699,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "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": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -6190,10 +5744,22 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, "dependencies": { "commondir": "^1.0.1", @@ -6221,22 +5787,15 @@ } }, "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/flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", - "deprecated": "flatten is deprecated in favor of utility frameworks such as lodash.", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, "node_modules/follow-redirects": { - "version": "1.14.7", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", - "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", + "version": "1.14.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", + "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==", "dev": true, "funding": [ { @@ -6253,38 +5812,6 @@ } } }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/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==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -6294,16 +5821,17 @@ "node": ">= 0.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=", + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, "engines": { - "node": ">=0.10.0" + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" } }, "node_modules/fresh": { @@ -6316,17 +5844,17 @@ } }, "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=12" } }, "node_modules/fs-minipass": { @@ -6374,66 +5902,22 @@ "dev": true }, "node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/gauge/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" - } - }, - "node_modules/gauge/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gauge/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gauge/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=", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", "dev": true, "dependencies": { - "ansi-regex": "^2.0.0" + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" }, "engines": { - "node": ">=0.10.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/gensync": { @@ -6468,40 +5952,31 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "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==", "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, "engines": { - "node": ">=6" + "node": ">=8.0.0" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "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==", "dev": true, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -6546,29 +6021,29 @@ } }, "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz", + "integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==", "dev": true, "dependencies": { - "array-union": "^2.1.0", + "array-union": "^3.0.1", "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", + "fast-glob": "^3.2.7", + "ignore": "^5.1.9", "merge2": "^1.4.1", - "slash": "^3.0.0" + "slash": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, "node_modules/handle-thing": { @@ -6577,76 +6052,31 @@ "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, "engines": { - "node": ">=4" + "node": ">= 0.4.0" } }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, "engines": { - "node": ">=6" - } - }, - "node_modules/har-validator/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" - } - }, - "node_modules/har-validator/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/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.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=", - "dev": true, - "engines": { - "node": ">=4" + "node": ">=4" } }, "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, "engines": { "node": ">= 0.4" @@ -6676,68 +6106,22 @@ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true }, - "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=", + "node_modules/hdr-histogram-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", "dev": true, "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" } }, - "node_modules/has-values/node_modules/is-number": { + "node_modules/hdr-histogram-percentiles-obj": { "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/has-values/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/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" - } + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", + "dev": true }, "node_modules/hosted-git-info": { "version": "4.1.0", @@ -6788,9 +6172,9 @@ } }, "node_modules/html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", "dev": true }, "node_modules/html-escaper": { @@ -6812,25 +6196,34 @@ "dev": true }, "node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "dependencies": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", + "statuses": "2.0.1", "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" } }, "node_modules/http-parser-js": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz", - "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.6.tgz", + "integrity": "sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==", "dev": true }, "node_modules/http-proxy": { @@ -6862,163 +6255,27 @@ } }, "node_modules/http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "dev": true, - "dependencies": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/http-proxy-middleware/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" - } - }, - "node_modules/http-proxy-middleware/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, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/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/http-proxy-middleware/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/http-proxy-middleware/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=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/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/http-proxy-middleware/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/http-proxy-middleware/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.4.tgz", + "integrity": "sha512-m/4FxX17SUvz4lJ5WPXOHDUuCwIqXLfLHs1s0uZ3oYjhoXlx9csYxaOa0ElDEJ+h8Q4iJ1s+lTMbiCa4EXIJqg==", "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" + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/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" + "node": ">=12.0.0" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "peerDependencies": { + "@types/express": "^4.17.13" }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } } }, "node_modules/https-proxy-agent": { @@ -7034,6 +6291,15 @@ "node": ">= 6" } }, + "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==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, "node_modules/humanize-ms": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", @@ -7097,12 +6363,15 @@ } }, "node_modules/ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz", + "integrity": "sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==", "dev": true, "dependencies": { "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10" } }, "node_modules/image-size": { @@ -7118,6 +6387,12 @@ "node": ">=0.10.0" } }, + "node_modules/immutable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", + "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", + "dev": true + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -7134,95 +6409,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/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==", - "dev": true, - "dependencies": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/import-local/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/import-local/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/import-local/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==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local/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/import-local/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=", + "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/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/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -7241,12 +6436,6 @@ "node": ">=8" } }, - "node_modules/indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, "node_modules/infer-owner": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", @@ -7279,9 +6468,9 @@ } }, "node_modules/inquirer": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.1.1.tgz", - "integrity": "sha512-hUDjc3vBkh/uk1gPfMAD/7Z188Q8cvTGl0nxwaCdwSbzFh6ZKkZh+s2ozVxbE5G9ZNRyeY0+lgbAIOUFsFf98w==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz", + "integrity": "sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ==", "dev": true, "dependencies": { "ansi-escapes": "^4.2.1", @@ -7292,9 +6481,9 @@ "figures": "^3.0.0", "lodash": "^4.17.21", "mute-stream": "0.0.8", - "ora": "^5.3.0", + "ora": "^5.4.1", "run-async": "^2.4.0", - "rxjs": "^6.6.6", + "rxjs": "^7.2.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0", "through": "^2.3.6" @@ -7373,62 +6562,19 @@ "node": ">=8" } }, - "node_modules/internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dev": true, - "dependencies": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/ip": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", "dev": true }, - "node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 10" } }, "node_modules/is-arguments": { @@ -7465,12 +6611,6 @@ "node": ">=8" } }, - "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==", - "dev": true - }, "node_modules/is-core-module": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", @@ -7483,18 +6623,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -7510,20 +6638,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -7539,18 +6653,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "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/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -7614,28 +6716,25 @@ "node": ">=6" } }, - "node_modules/is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "dependencies": { - "is-path-inside": "^2.1.0" - }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true, - "dependencies": { - "path-is-inside": "^1.0.2" - }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-plain-object": { @@ -7667,20 +6766,17 @@ } }, "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -7699,15 +6795,6 @@ "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", "dev": true }, - "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/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -7727,9 +6814,9 @@ "dev": true }, "node_modules/isbinaryfile": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", - "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", "dev": true, "engines": { "node": ">= 8.0.0" @@ -7753,12 +6840,6 @@ "node": ">=0.10.0" } }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -7769,14 +6850,15 @@ } }, "node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", + "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", "dev": true, "dependencies": { - "@babel/core": "^7.7.5", + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-coverage": "^3.2.0", "semver": "^6.3.0" }, "engines": { @@ -7851,9 +6933,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz", - "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -7864,9 +6946,9 @@ } }, "node_modules/jasmine-core": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.7.1.tgz", - "integrity": "sha512-DH3oYDS/AUvvr22+xUBW62m1Xoy7tUlY1tsxKEJvl5JeJ7q8zd1K5bUwiOxdH+erj6l2vAMM3hV25Xs9/WrmuQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.1.0.tgz", + "integrity": "sha512-8E8BiffCL8sBwK1zU9cbavLe8xpJAgOduSJ6N8PJVv8VosQ/nxVTuXj2kUeHxTlZBVvh24G19ga7xdiaxlceKg==", "dev": true }, "node_modules/jest-worker": { @@ -7913,11 +6995,18 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } }, "node_modules/jsesc": { "version": "2.5.2", @@ -7943,38 +7032,17 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "node_modules/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=", - "dev": true - }, - "node_modules/json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", - "dev": true - }, "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, "bin": { "json5": "lib/cli.js" }, @@ -7989,10 +7057,13 @@ "dev": true }, "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -8006,31 +7077,16 @@ "node >= 0.2.0" ] }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/karma": { - "version": "6.3.11", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.11.tgz", - "integrity": "sha512-QGUh4yXgizzDNPLB5nWTvP+wysKexngbyLVWFOyikB661hpa2RZLf5anZQzqliWtAQuYVep0ot0D1U7UQKpsxQ==", + "version": "6.3.18", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.18.tgz", + "integrity": "sha512-YEwXVHRILKWKN7uEW9IkgTPjnYGb3YA3MDvlp04xpSRAyrNPoRmsBayLDgHykKAwBm6/mAOckj4xi/1JdQfhzQ==", "dev": true, "dependencies": { + "@colors/colors": "1.5.0", "body-parser": "^1.19.0", "braces": "^3.0.2", "chokidar": "^3.5.1", - "colors": "1.4.0", "connect": "^3.7.0", "di": "^0.0.1", "dom-serialize": "^2.2.1", @@ -8039,13 +7095,14 @@ "http-proxy": "^1.18.1", "isbinaryfile": "^4.0.8", "lodash": "^4.17.21", - "log4js": "^6.3.0", + "log4js": "^6.4.1", "mime": "^2.5.2", "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", "qjobs": "^1.2.0", "range-parser": "^1.2.1", "rimraf": "^3.0.2", - "socket.io": "^4.2.0", + "socket.io": "^4.4.1", "source-map": "^0.6.1", "tmp": "^0.2.1", "ua-parser-js": "^0.7.30", @@ -8059,25 +7116,25 @@ } }, "node_modules/karma-chrome-launcher": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz", - "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz", + "integrity": "sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ==", "dev": true, "dependencies": { "which": "^1.2.1" } }, "node_modules/karma-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.0.3.tgz", - "integrity": "sha512-atDvLQqvPcLxhED0cmXYdsPMCQuh6Asa9FMZW1bhNqlVEhJoB9qyZ2BY1gu7D/rr5GLGb5QzYO4siQskxaWP/g==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.0.tgz", + "integrity": "sha512-gPVdoZBNDZ08UCzdMHHhEImKrw1+PAOQOIiffv1YsvxFhBjqvo/SVXNk4tqn1SYqX0BJZT6S/59zgxiBe+9OuA==", "dev": true, "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.1", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", "minimatch": "^3.0.4" }, "engines": { @@ -8085,18 +7142,18 @@ } }, "node_modules/karma-jasmine": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-4.0.1.tgz", - "integrity": "sha512-h8XDAhTiZjJKzfkoO1laMH+zfNlra+dEQHUAjpn5JV1zCPtOIVWGQjLBrqhnzQa/hrU2XrZwSyBa6XjEBzfXzw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.0.0.tgz", + "integrity": "sha512-dsFkCoTwyoNyQnMgegS72wIA/2xPDJG5yzTry0448U6lAY7P60Wgg4UuLlbdLv8YHbimgNpDXjjmfPdc99EDWQ==", "dev": true, "dependencies": { - "jasmine-core": "^3.6.0" + "jasmine-core": "^4.1.0" }, "engines": { - "node": ">= 10" + "node": ">=12" }, "peerDependencies": { - "karma": "*" + "karma": "^6.0.0" } }, "node_modules/karma-jasmine-html-reporter": { @@ -8119,6 +7176,18 @@ "source-map-support": "^0.5.5" } }, + "node_modules/karma/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/karma/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -8167,12 +7236,6 @@ "node": ">=10" } }, - "node_modules/killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true - }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -8192,14 +7255,14 @@ } }, "node_modules/less": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/less/-/less-4.1.1.tgz", - "integrity": "sha512-w09o8tZFPThBscl5d0Ggp3RcrKIouBoQscnOMgFH3n5V3kN/CXGHNfCkRPtxJk6nKryDXaV9aHLK55RXuH4sAw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.2.tgz", + "integrity": "sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA==", "dev": true, "dependencies": { "copy-anything": "^2.0.1", "parse-node-version": "^1.0.1", - "tslib": "^1.10.0" + "tslib": "^2.3.0" }, "bin": { "lessc": "bin/lessc" @@ -8218,9 +7281,9 @@ } }, "node_modules/less-loader": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-10.0.0.tgz", - "integrity": "sha512-JjioAkw9qyavL0BzMPUOHJa0a20fh+ipq/MNZH4OkU8qERsCMeZIWRE0FDBIx2O+cFguvY01vHh/lmBA9LyWDg==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-10.2.0.tgz", + "integrity": "sha512-AV5KHWvCezW27GT90WATaDnfXBv99llDbtaj4bshq6DvAihMdNjaPDcUMa6EXKLRF+P2opFenJp89BXg91XLYg==", "dev": true, "dependencies": { "klona": "^2.0.4" @@ -8294,36 +7357,23 @@ "node": ">=0.10.0" } }, - "node_modules/less/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/license-webpack-plugin": { - "version": "2.3.20", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.3.20.tgz", - "integrity": "sha512-AHVueg9clOKACSHkhmEI+PCC9x8+qsQVuKECZD3ETxETK5h/PCv5/MUzyG1gm8OMcip/s1tcNxqo9Qb7WhjGsg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", "dev": true, "dependencies": { - "@types/webpack-sources": "^0.1.5", - "webpack-sources": "^1.2.0" + "webpack-sources": "^3.0.0" }, "peerDependenciesMeta": { "webpack": { "optional": true + }, + "webpack-sources": { + "optional": true } } }, - "node_modules/lilconfig": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", - "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -8331,26 +7381,21 @@ "dev": true }, "node_modules/loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "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, "engines": { "node": ">=6.11.5" } }, "node_modules/loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", + "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, "engines": { - "node": ">=8.9.0" + "node": ">= 12.13.0" } }, "node_modules/locate-path": { @@ -8386,12 +7431,6 @@ "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -8479,32 +7518,36 @@ } }, "node_modules/log4js": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", - "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==", + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.4.tgz", + "integrity": "sha512-ncaWPsuw9Vl1CKA406hVnJLGQKy1OHx6buk8J4rE2lVW+NW5Y82G5/DIloO7NkqLOUtNPEANaWC1kZYVjXssPw==", "dev": true, "dependencies": { - "date-format": "^3.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.1", - "rfdc": "^1.1.4", - "streamroller": "^2.2.4" + "date-format": "^4.0.6", + "debug": "^4.3.4", + "flatted": "^3.2.5", + "rfdc": "^1.3.0", + "streamroller": "^3.0.6" }, "engines": { "node": ">=8.0" } }, - "node_modules/loglevel": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz", - "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==", + "node_modules/log4js/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, + "dependencies": { + "ms": "2.1.2" + }, "engines": { - "node": ">= 0.6.0" + "node": ">=6.0" }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/lru-cache": { @@ -8579,181 +7622,65 @@ "node": ">= 10" } }, - "node_modules/map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "dependencies": { - "p-defer": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "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=", + "node_modules/memfs": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", + "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", "dev": true, "dependencies": { - "object-visit": "^1.0.0" + "fs-monkey": "1.0.3" }, "engines": { - "node": ">=0.10.0" + "node": ">= 4.0.0" } }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", "dev": true }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true, - "engines": { - "node": ">= 0.6" - } + "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==", + "dev": true }, - "node_modules/mem": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", - "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "dependencies": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^3.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/mem?sponsor=1" + "node": ">= 8" } }, - "node_modules/mem/node_modules/mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", "dev": true, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/memfs": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", - "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "dependencies": { - "fs-monkey": "1.0.3" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "node_modules/memory-fs/node_modules/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==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/memory-fs/node_modules/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==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "node_modules/merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", - "dev": true, - "dependencies": { - "source-map": "^0.6.1" - } - }, - "node_modules/merge-source-map/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==", - "dev": true, - "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==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" @@ -8772,21 +7699,21 @@ } }, "node_modules/mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "dependencies": { - "mime-db": "1.51.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" @@ -8802,69 +7729,37 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", - "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.5.3.tgz", + "integrity": "sha512-YseMB8cs8U/KCaAGQoqYmfUuhhGW0a9p9XvWXrxVOkE3/IiISTLw4ALNt7JR5B2eYauFM+PQGSbXMDmVbR7Tfw==", "dev": true, "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "webpack-sources": "^1.1.0" + "schema-utils": "^4.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.4.0 || ^5.0.0" - } - }, - "node_modules/mini-css-extract-plugin/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" - } - }, - "node_modules/mini-css-extract-plugin/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" + "webpack": "^5.0.0" } }, - "node_modules/mini-css-extract-plugin/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/mini-css-extract-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==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", @@ -8878,9 +7773,9 @@ "dev": true }, "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -8890,9 +7785,9 @@ } }, "node_modules/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==", "dev": true }, "node_modules/minipass": { @@ -8995,19 +7890,6 @@ "node": ">= 8" } }, - "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/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -9051,17 +7933,10 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, - "node_modules/nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", - "dev": true, - "optional": true - }, "node_modules/nanoid": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", - "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.2.tgz", + "integrity": "sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==", "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" @@ -9070,28 +7945,6 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "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/needle": { "version": "2.9.1", "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", @@ -9121,9 +7974,9 @@ } }, "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, "engines": { "node": ">= 0.6" @@ -9135,36 +7988,52 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": 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/nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "!win32" + ], + "dependencies": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "optional": true }, "node_modules/node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true, "engines": { - "node": ">= 6.0.0" + "node": ">= 6.13.0" } }, "node_modules/node-gyp": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", - "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", "dev": true, "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", - "graceful-fs": "^4.2.3", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "request": "^2.88.2", + "npmlog": "^6.0.0", "rimraf": "^3.0.2", - "semver": "^7.3.2", - "tar": "^6.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", "which": "^2.0.2" }, "bin": { @@ -9174,6 +8043,18 @@ "node": ">= 10.12.0" } }, + "node_modules/node-gyp-build": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", + "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", + "dev": true, + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, "node_modules/node-gyp/node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -9190,9 +8071,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.3.tgz", + "integrity": "sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==", "dev": true }, "node_modules/nopt": { @@ -9228,18 +8109,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/npm-bundled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", @@ -9282,13 +8151,13 @@ } }, "node_modules/npm-packlist": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", - "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz", + "integrity": "sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==", "dev": true, "dependencies": { "glob": "^7.1.6", - "ignore-walk": "^3.0.3", + "ignore-walk": "^4.0.1", "npm-bundled": "^1.1.1", "npm-normalize-package-bin": "^1.0.1" }, @@ -9312,176 +8181,222 @@ } }, "node_modules/npm-registry-fetch": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", - "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-12.0.2.tgz", + "integrity": "sha512-Df5QT3RaJnXYuOwtXBXS9BWs+tHH2olvkCLh6jcR/b/u3DvPMlp3J0TvvYwplPKxHMOwfg287PYih9QqaVFoKA==", "dev": true, "dependencies": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", + "make-fetch-happen": "^10.0.1", + "minipass": "^3.1.6", + "minipass-fetch": "^1.4.1", "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" + "minizlib": "^2.1.2", + "npm-package-arg": "^8.1.5" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16" } }, - "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=", + "node_modules/npm-registry-fetch/node_modules/@npmcli/fs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz", + "integrity": "sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ==", "dev": true, "dependencies": { - "path-key": "^2.0.0" + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" }, "engines": { - "node": ">=4" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "node_modules/npm-registry-fetch/node_modules/@npmcli/move-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", + "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", "dev": true, "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "node_modules/npm-registry-fetch/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "engines": { + "node": ">= 10" } }, - "node_modules/num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "node_modules/npm-registry-fetch/node_modules/cacache": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.0.4.tgz", + "integrity": "sha512-U0D4wF3/W8ZgK4qDA5fTtOVSr0gaDfd5aa7tUdAV0uukVWKsAIn6SzXQCoVlg7RWZiJa+bcsM3/pXLumGaL2Ug==", "dev": true, + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^7.2.0", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^1.1.1" + }, "engines": { - "node": ">=0.10.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "node_modules/npm-registry-fetch/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, "engines": { - "node": "*" + "node": ">= 6" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "node_modules/npm-registry-fetch/node_modules/lru-cache": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", + "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.2.tgz", + "integrity": "sha512-GWMGiZsKVeJACQGJ1P3Z+iNec7pLsU6YW1q11eaPn3RR8nRXHppFWfP7Eu0//55JK3hSjrAQRl8sDa5uXpq1Ew==", "dev": true, "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "agentkeepalive": "^4.2.1", + "cacache": "^16.0.2", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.1.1", + "ssri": "^9.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.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=", + "node_modules/npm-registry-fetch/node_modules/make-fetch-happen/node_modules/minipass-fetch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", + "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", "dev": true, "dependencies": { - "is-descriptor": "^0.1.0" + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" }, "engines": { - "node": ">=0.10.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" } }, - "node_modules/object-copy/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=", + "node_modules/npm-registry-fetch/node_modules/ssri": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.0.tgz", + "integrity": "sha512-Y1Z6J8UYnexKFN1R/hxUaYoY2LVdKEzziPmVAFKiKX8fiwvCJTVzn/xYE9TEWod5OVyNfIHHuVfIEuBClL/uJQ==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "minipass": "^3.1.1" }, "engines": { - "node": ">=0.10.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/object-copy/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=", + "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==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "path-key": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/object-copy/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==", + "node_modules/npmlog": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.1.tgz", + "integrity": "sha512-BTHDvY6nrRHuRfyjt1MAufLxYdVXZfd099H4+i1f0lPywNQyI4foeNXJRObB/uy+TYqUW0vAD9gbdSOXPst7Eg==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.0", + "set-blocking": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "^12.13.0 || ^14.15.0 || >=16" } }, - "node_modules/object-copy/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==", + "node_modules/nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "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=", + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, "engines": { "node": ">=0.10.0" } }, + "node_modules/object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/object-is": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", @@ -9507,18 +8422,6 @@ "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", @@ -9537,18 +8440,6 @@ "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/obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -9556,9 +8447,9 @@ "dev": true }, "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "dependencies": { "ee-first": "1.1.1" @@ -9601,9 +8492,9 @@ } }, "node_modules/open": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/open/-/open-8.2.1.tgz", - "integrity": "sha512-rXILpcQlkF/QuFez2BJDf3GsqpjGKbkUUToAIGo9A0Q6ZkoSGogZJulrUdwRkrAsoQvoZsrjCYt8+zblOk7JQQ==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "dev": true, "dependencies": { "define-lazy-prop": "^2.0.0", @@ -9617,27 +8508,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dev": true, - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/opn/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/ora": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", @@ -9731,15 +8601,6 @@ "node": ">=8" } }, - "node_modules/original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "dev": true, - "dependencies": { - "url-parse": "^1.4.3" - } - }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -9749,24 +8610,6 @@ "node": ">=0.10.0" } }, - "node_modules/p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -9825,15 +8668,25 @@ } }, "node_modules/p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", + "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", "dev": true, "dependencies": { - "retry": "^0.12.0" + "@types/retry": "^0.12.0", + "retry": "^0.13.1" }, "engines": { - "node": ">=6" + "node": ">=8" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" } }, "node_modules/p-try": { @@ -9846,15 +8699,15 @@ } }, "node_modules/pacote": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.4.tgz", - "integrity": "sha512-RfahPCunM9GI7ryJV/zY0bWQiokZyLqaSNHXtbNSoLb7bwTvBbJBEyCJ01KWs4j1Gj7GmX8crYXQ1sNX6P2VKA==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-12.0.3.tgz", + "integrity": "sha512-CdYEl03JDrRO3x18uHjBYA9TyoW8gy+ThVcypcDkxPtKlw76e4ejhYB6i9lJ+/cebbjpqPW/CijjqxwDTts8Ow==", "dev": true, "dependencies": { - "@npmcli/git": "^2.0.1", + "@npmcli/git": "^2.1.0", "@npmcli/installed-package-contents": "^1.0.6", "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^1.8.2", + "@npmcli/run-script": "^2.0.0", "cacache": "^15.0.5", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", @@ -9862,9 +8715,9 @@ "minipass": "^3.1.3", "mkdirp": "^1.0.3", "npm-package-arg": "^8.0.1", - "npm-packlist": "^2.1.4", + "npm-packlist": "^3.0.0", "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^11.0.0", + "npm-registry-fetch": "^12.0.0", "promise-retry": "^2.0.1", "read-package-json-fast": "^2.0.1", "rimraf": "^3.0.2", @@ -9875,9 +8728,15 @@ "pacote": "lib/bin.js" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16" } }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -9978,21 +8837,6 @@ "node": ">= 0.8" } }, - "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-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -10011,19 +8855,13 @@ "node": ">=0.10.0" } }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/path-parse": { @@ -10047,12 +8885,6 @@ "node": ">=8" } }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -10080,25 +8912,18 @@ "node": ">=0.10.0" } }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "node_modules/piscina": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", + "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", "dev": true, "dependencies": { - "pinkie": "^2.0.0" + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0" }, - "engines": { - "node": ">=0.10.0" + "optionalDependencies": { + "nice-napi": "^1.0.2" } }, "node_modules/pkg-dir": { @@ -10137,1042 +8962,954 @@ } }, "node_modules/portfinder/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==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "dependencies": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" } }, - "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/postcss": { - "version": "8.3.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", - "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", + "version": "8.4.12", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz", + "integrity": "sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], "dependencies": { - "colorette": "^1.2.2", - "nanoid": "^3.1.23", - "source-map-js": "^0.6.2" + "nanoid": "^3.3.1", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" }, "engines": { "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" } }, "node_modules/postcss-attribute-case-insensitive": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", - "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.0.tgz", + "integrity": "sha512-b4g9eagFGq9T5SWX4+USfVyjIb3liPnjhHHRMP7FMB2kFVpYyfEscV0wP3eaXhKlcHKUut8lt5BGoeylWA/dBQ==", "dev": true, "dependencies": { - "postcss": "^7.0.2", "postcss-selector-parser": "^6.0.2" + }, + "peerDependencies": { + "postcss": "^8.0.2" } }, - "node_modules/postcss-attribute-case-insensitive/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-attribute-case-insensitive/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/postcss-color-functional-notation": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.2.tgz", + "integrity": "sha512-DXVtwUhIk4f49KK5EGuEdgx4Gnyj6+t2jBSEmxvpIK9QI40tWrpS2Pua8Q7iIZWBrki2QOaeUdEaLPPa91K0RQ==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6.0.0" + "node": "^12 || ^14 || >=16" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/postcss-attribute-case-insensitive/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==", + "node_modules/postcss-color-hex-alpha": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.3.tgz", + "integrity": "sha512-fESawWJCrBV035DcbKRPAVmy21LpoyiXdPTuHUfWJ14ZRjY7Y7PA6P4g8z6LQGYhU1WAxkTxjIjurXzoe68Glw==", "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/postcss-calc": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.2.tgz", - "integrity": "sha512-B5R0UeB4zLJvxNt1FVCaDZULdzsKLPc6FhjFJ+xwFiq7VG4i9cuaJLxVjNtExNK8ocm3n2o4unXXLiVX1SCqxA==", + "node_modules/postcss-color-rebeccapurple": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.0.2.tgz", + "integrity": "sha512-SFc3MaocHaQ6k3oZaFwH8io6MdypkUtEy/eXzXEB1vEQlO3S3oDc/FSZA8AsS04Z25RirQhlDlHLh3dn7XewWw==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" }, "peerDependencies": { - "postcss": "^8.2.2" + "postcss": "^8.3" } }, - "node_modules/postcss-color-functional-notation": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", - "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", + "node_modules/postcss-custom-media": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.0.tgz", + "integrity": "sha512-FvO2GzMUaTN0t1fBULDeIvxr5IvbDXcIatt6pnJghc736nqNgsGao5NT+5+WVLAQiTt6Cb3YUms0jiPaXhL//g==", "dev": true, - "dependencies": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, "engines": { - "node": ">=6.0.0" + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/postcss-color-functional-notation/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-color-functional-notation/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/postcss-custom-properties": { + "version": "12.1.7", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.7.tgz", + "integrity": "sha512-N/hYP5gSoFhaqxi2DPCmvto/ZcRDVjE3T1LiAMzc/bg53hvhcHOLpXOHb526LzBBp5ZlAUhkuot/bfpmpgStJg==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6.0.0" + "node": "^12 || ^14 || >=16" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/postcss-color-functional-notation/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==", + "node_modules/postcss-custom-selectors": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.0.tgz", + "integrity": "sha512-/1iyBhz/W8jUepjGyu7V1OPcGbc636snN1yXEQCinb6Bwt7KxsiU7/bLQlp8GwAXzCh7cobBU5odNn/2zQWR8Q==", "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.1.2" } }, - "node_modules/postcss-color-gray": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", - "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", + "node_modules/postcss-dir-pseudo-class": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.4.tgz", + "integrity": "sha512-I8epwGy5ftdzNWEYok9VjW9whC4xnelAtbajGv4adql4FIF09rnrxnA9Y8xSHN47y7gqFIv10C5+ImsLeJpKBw==", "dev": true, "dependencies": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" + "postcss-selector-parser": "^6.0.9" }, "engines": { - "node": ">=6.0.0" + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/postcss-color-gray/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-color-gray/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/postcss-double-position-gradients": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.1.tgz", + "integrity": "sha512-jM+CGkTs4FcG53sMPjrrGE0rIvLDdCrqMzgDC5fLI7JHDO7o6QG8C5TQBtExb13hdBdoH9C2QVbG4jo2y9lErQ==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6.0.0" + "node": "^12 || ^14 || >=16" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/postcss-color-gray/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==", + "node_modules/postcss-env-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/postcss-color-hex-alpha": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", - "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", + "node_modules/postcss-focus-visible": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", "dev": true, "dependencies": { - "postcss": "^7.0.14", - "postcss-values-parser": "^2.0.1" + "postcss-selector-parser": "^6.0.9" }, "engines": { - "node": ">=6.0.0" + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/postcss-color-hex-alpha/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-color-hex-alpha/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/postcss-focus-within": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "postcss-selector-parser": "^6.0.9" }, "engines": { - "node": ">=6.0.0" + "node": "^12 || ^14 || >=16" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/postcss-color-hex-alpha/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==", + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/postcss-color-mod-function": { + "node_modules/postcss-gap-properties": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", - "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.3.tgz", + "integrity": "sha512-rPPZRLPmEKgLk/KlXMqRaNkYTUpE7YC+bOIQFN5xcu1Vp11Y4faIXv6/Jpft6FMnl6YRxZqDZG0qQOW80stzxQ==", "dev": true, - "dependencies": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, "engines": { - "node": ">=6.0.0" + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/postcss-color-mod-function/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-color-mod-function/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/postcss-image-set-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.6.tgz", + "integrity": "sha512-KfdC6vg53GC+vPd2+HYzsZ6obmPqOk6HY09kttU19+Gj1nC3S3XBVEXDHxkhxTohgZqzbUb94bKXvKDnYWBm/A==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6.0.0" + "node": "^12 || ^14 || >=16" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/postcss-color-mod-function/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==", + "node_modules/postcss-import": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz", + "integrity": "sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g==", "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" } }, - "node_modules/postcss-color-rebeccapurple": { + "node_modules/postcss-initial": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", - "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "dev": true, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-lab-function": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.0.tgz", + "integrity": "sha512-Zb1EO9DGYfa3CP8LhINHCcTTCTLI+R3t7AX2mKsDzdgVQ/GkCpHOTgOr6HBHslP7XDdVbqgHW5vvRPMdVANQ8w==", "dev": true, "dependencies": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6.0.0" + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/postcss-color-rebeccapurple/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-color-rebeccapurple/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" }, "engines": { - "node": ">=6.0.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" } }, - "node_modules/postcss-color-rebeccapurple/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==", + "node_modules/postcss-logical": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/postcss-colormin": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.3.tgz", - "integrity": "sha512-dra4xoAjub2wha6RUXAgadHEn2lGxbj8drhFcIGLOMn914Eu7DkPUurugDXgstwttCYkJtZ/+PkWRWdp3UHRIA==", + "node_modules/postcss-media-minmax": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=10.0.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.1.0" } }, - "node_modules/postcss-convert-values": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.2.tgz", - "integrity": "sha512-KQ04E2yadmfa1LqXm7UIDwW1ftxU/QWZmz6NKnHnUvJ3LEYbbcX6i329f/ig+WnEByHegulocXrECaZGLpL8Zg==", + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "dev": true, - "dependencies": { - "postcss-value-parser": "^4.1.0" - }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^10 || ^12 || >= 14" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.1.0" } }, - "node_modules/postcss-custom-media": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", - "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "dev": true, "dependencies": { - "postcss": "^7.0.14" + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.0.0" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/postcss-custom-media/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-custom-media/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "postcss-selector-parser": "^6.0.4" }, "engines": { - "node": ">=6.0.0" + "node": "^10 || ^12 || >= 14" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-custom-media/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==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/postcss-custom-properties": { - "version": "8.0.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", - "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, "dependencies": { - "postcss": "^7.0.17", - "postcss-values-parser": "^2.0.1" + "icss-utils": "^5.0.0" }, "engines": { - "node": ">=6.0.0" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/postcss-custom-properties/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-custom-properties/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/postcss-nesting": { + "version": "10.1.4", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.4.tgz", + "integrity": "sha512-2ixdQ59ik/Gt1+oPHiI1kHdwEI8lLKEmui9B1nl6163ANLC+GewQn7fXMxJF2JSb4i2MKL96GU8fIiQztK4TTA==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "postcss-selector-parser": "^6.0.10" }, "engines": { - "node": ">=6.0.0" + "node": "^12 || ^14 || >=16" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/postcss-custom-properties/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==", + "node_modules/postcss-overflow-shorthand": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.3.tgz", + "integrity": "sha512-CxZwoWup9KXzQeeIxtgOciQ00tDtnylYIlJBBODqkgS/PU2jISuWOL/mYLHmZb9ZhZiCaNKsCRiLp22dZUtNsg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/postcss-custom-selectors": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", - "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", + "node_modules/postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "dev": true, + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.4.tgz", + "integrity": "sha512-MrgKeiiu5OC/TETQO45kV3npRjOFxEHthsqGtkh3I1rPbZSbXGD/lZVi9j13cYh+NA8PIAPyk6sGjT9QbRyvSg==", "dev": true, "dependencies": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6.0.0" + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/postcss-custom-selectors/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", + "node_modules/postcss-preset-env": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.2.3.tgz", + "integrity": "sha512-Ok0DhLfwrcNGrBn8sNdy1uZqWRk/9FId0GiQ39W4ILop5GHtjJs8bu1MY9isPwHInpVEPWjb4CEcEaSbBLpfwA==", "dev": true, - "bin": { - "cssesc": "bin/cssesc" + "dependencies": { + "autoprefixer": "^10.4.2", + "browserslist": "^4.19.1", + "caniuse-lite": "^1.0.30001299", + "css-blank-pseudo": "^3.0.2", + "css-has-pseudo": "^3.0.3", + "css-prefers-color-scheme": "^6.0.2", + "cssdb": "^5.0.0", + "postcss-attribute-case-insensitive": "^5.0.0", + "postcss-color-functional-notation": "^4.2.1", + "postcss-color-hex-alpha": "^8.0.2", + "postcss-color-rebeccapurple": "^7.0.2", + "postcss-custom-media": "^8.0.0", + "postcss-custom-properties": "^12.1.2", + "postcss-custom-selectors": "^6.0.0", + "postcss-dir-pseudo-class": "^6.0.3", + "postcss-double-position-gradients": "^3.0.4", + "postcss-env-function": "^4.0.4", + "postcss-focus-visible": "^6.0.3", + "postcss-focus-within": "^5.0.3", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^3.0.2", + "postcss-image-set-function": "^4.0.4", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^4.0.3", + "postcss-logical": "^5.0.3", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^10.1.2", + "postcss-overflow-shorthand": "^3.0.2", + "postcss-page-break": "^3.0.4", + "postcss-place": "^7.0.3", + "postcss-pseudo-class-any-link": "^7.0.2", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^5.0.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/postcss-custom-selectors/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-custom-selectors/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/postcss-pseudo-class-any-link": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.2.tgz", + "integrity": "sha512-76XzEQv3g+Vgnz3tmqh3pqQyRojkcJ+pjaePsyhcyf164p9aZsu3t+NWxkZYbcHLK1ju5Qmalti2jPI5IWCe5w==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "postcss-selector-parser": "^6.0.10" }, "engines": { - "node": ">=6.0.0" + "node": "^12 || ^14 || >=16" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "dependencies": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "url": "https://opencollective.com/csstools" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/postcss-custom-selectors/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==", + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", "dev": true, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "postcss": "^8.0.3" } }, - "node_modules/postcss-dir-pseudo-class": { + "node_modules/postcss-selector-not": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", - "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-5.0.0.tgz", + "integrity": "sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ==", "dev": true, "dependencies": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" + "balanced-match": "^1.0.0" }, - "engines": { - "node": ">=4.0.0" + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/postcss-dir-pseudo-class/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", "dev": true, - "bin": { - "cssesc": "bin/cssesc" + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { "node": ">=4" } }, - "node_modules/postcss-dir-pseudo-class/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, - "node_modules/postcss-dir-pseudo-class/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, "engines": { - "node": ">=6.0.0" + "node": ">=6" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "node_modules/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==", + "dev": true + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, "dependencies": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "err-code": "^2.0.2", + "retry": "^0.12.0" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/postcss-dir-pseudo-class/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==", + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/postcss-discard-comments": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", - "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 0.10" } }, - "node_modules/postcss-discard-duplicates": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", - "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } + "optional": true }, - "node_modules/postcss-discard-empty": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", - "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", + "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==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=6" } }, - "node_modules/postcss-discard-overridden": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.2.tgz", - "integrity": "sha512-+56BLP6NSSUuWUXjRgAQuho1p5xs/hU5Sw7+xt9S3JSg+7R6+WMGnJW7Hre/6tTuZ2xiXMB42ObkiZJ2hy/Pew==", + "node_modules/qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=0.9" } }, - "node_modules/postcss-double-position-gradients": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", - "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", + "node_modules/qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", "dev": true, "dependencies": { - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" + "side-channel": "^1.0.4" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-double-position-gradients/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "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/postcss-double-position-gradients/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "safe-buffer": "^5.1.0" } }, - "node_modules/postcss-double-position-gradients/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==", + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/postcss-env-function": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", - "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, "dependencies": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">= 0.8" } }, - "node_modules/postcss-env-function/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-env-function/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-env-function/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==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "pify": "^2.3.0" } }, - "node_modules/postcss-focus-visible": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", - "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", + "node_modules/read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", "dev": true, "dependencies": { - "postcss": "^7.0.2" + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" }, "engines": { - "node": ">=6.0.0" + "node": ">=10" } }, - "node_modules/postcss-focus-visible/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-focus-visible/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "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==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-focus-visible/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==", - "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, - "node_modules/postcss-focus-within": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", - "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "dependencies": { - "postcss": "^7.0.2" + "picomatch": "^2.2.1" }, "engines": { - "node": ">=6.0.0" + "node": ">=8.10.0" } }, - "node_modules/postcss-focus-within/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "node_modules/reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", "dev": true }, - "node_modules/postcss-focus-within/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "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": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "regenerate": "^1.4.2" }, "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": ">=4" } }, - "node_modules/postcss-focus-within/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==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true }, - "node_modules/postcss-font-variant": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz", - "integrity": "sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA==", + "node_modules/regenerator-transform": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", "dev": true, "dependencies": { - "postcss": "^7.0.2" + "@babel/runtime": "^7.8.4" } }, - "node_modules/postcss-font-variant/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "node_modules/regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", "dev": true }, - "node_modules/postcss-font-variant/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/regexp.prototype.flags": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.2.tgz", + "integrity": "sha512-Ynz8fTQW5/1elh+jWU2EDDzeoNbD0OQ0R+D1VJU5ATOkUaro4A9YEkdN2ODQl/8UQFPPpZNw91fOcLFamM7Pww==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" }, "engines": { - "node": ">=6.0.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-font-variant/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==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-gap-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", - "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", + "node_modules/regexpu-core": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", + "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", "dev": true, "dependencies": { - "postcss": "^7.0.2" + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=4" } }, - "node_modules/postcss-gap-properties/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "node_modules/regjsgen": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", "dev": true }, - "node_modules/postcss-gap-properties/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/regjsparser": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" + "jsesc": "~0.5.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "bin": { + "regjsparser": "bin/parser" } }, - "node_modules/postcss-gap-properties/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==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-image-set-function": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", - "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-image-set-function/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-image-set-function/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "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, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "bin": { + "jsesc": "bin/jsesc" } }, - "node_modules/postcss-image-set-function/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==", + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/postcss-import": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz", - "integrity": "sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g==", + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-initial": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.4.tgz", - "integrity": "sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2" + "node": ">=0.10.0" } }, - "node_modules/postcss-initial/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true }, - "node_modules/postcss-initial/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=6.0.0" + "bin": { + "resolve": "bin/resolve" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-initial/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==", + "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==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/postcss-lab-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", - "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", "dev": true, "dependencies": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" }, "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, - "node_modules/postcss-lab-function/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-lab-function/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" }, "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": ">=8.9.0" } }, - "node_modules/postcss-lab-function/node_modules/source-map": { + "node_modules/resolve-url-loader/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==", @@ -11181,742 +9918,727 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-loader": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.1.0.tgz", - "integrity": "sha512-yA/cXBfACkthZNA2hQxOnaReVfQ6uLmvbEDQzNafpbK40URZJvP/28dL1DG174Gvz3ptkkHbbwDBCh+gXR94CA==", - "dev": true, - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-logical": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", - "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", + "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": { - "postcss": "^7.0.2" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, - "node_modules/postcss-logical/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-logical/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": ">= 4" } }, - "node_modules/postcss-logical/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==", + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, "engines": { + "iojs": ">=1.0.0", "node": ">=0.10.0" } }, - "node_modules/postcss-media-minmax": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", - "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", - "dev": true, - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-media-minmax/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", "dev": true }, - "node_modules/postcss-media-minmax/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "glob": "^7.1.3" }, - "engines": { - "node": ">=6.0.0" + "bin": { + "rimraf": "bin.js" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/postcss-media-minmax/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==", + "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.10.0" + "node": ">=0.12.0" } }, - "node_modules/postcss-merge-longhand": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.4.tgz", - "integrity": "sha512-2lZrOVD+d81aoYkZDpWu6+3dTAAGkCKbV5DoRhnIR7KOULVrI/R7bcMjhrH9KTRy6iiHKqmtG+n/MMj1WmqHFw==", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, + "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": { - "postcss-value-parser": "^4.1.0", - "stylehacks": "^5.0.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "queue-microtask": "^1.2.2" } }, - "node_modules/postcss-merge-rules": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.4.tgz", - "integrity": "sha512-yOj7bW3NxlQxaERBB0lEY1sH5y+RzevjbdH4DBJurjKERNpknRByFNdNe+V72i5pIZL12woM9uGdS5xbSB+kDQ==", - "dev": true, + "node_modules/rxjs": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", + "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.0.0", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "tslib": "^2.1.0" } }, - "node_modules/postcss-minify-font-values": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.2.tgz", - "integrity": "sha512-R6MJZryq28Cw0AmnyhXrM7naqJZZLoa1paBltIzh2wM7yb4D45TLur+eubTQ4jCmZU9SGeZdWsc5KcSoqTMeTg==", + "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==", + "dev": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass": { + "version": "1.49.9", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.9.tgz", + "integrity": "sha512-YlYWkkHP9fbwaFRZQRXgDi3mXZShslVmmo+FVK3kHLUELHHEYrCmL1x6IUjC7wLS6VuJSAFXRQS/DxdsC4xL1A==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0" + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "bin": { + "sass": "sass.js" }, - "peerDependencies": { - "postcss": "^8.2.15" + "engines": { + "node": ">=12.0.0" } }, - "node_modules/postcss-minify-gradients": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.4.tgz", - "integrity": "sha512-RVwZA7NC4R4J76u8X0Q0j+J7ItKUWAeBUJ8oEEZWmtv3Xoh19uNJaJwzNpsydQjk6PkuhRrK+YwwMf+c+68EYg==", + "node_modules/sass-loader": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.4.0.tgz", + "integrity": "sha512-7xN+8khDIzym1oL9XyS6zP6Ges+Bo2B2xbPrjdMHEYyV3AQYhd/wXeru++3ODHF0zMjYmVadblSKrPrjEkL8mg==", "dev": true, "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.0.0", - "postcss-value-parser": "^4.2.0" + "klona": "^2.0.4", + "neo-async": "^2.6.2" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "postcss": "^8.2.15" + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } } }, - "node_modules/postcss-minify-params": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.3.tgz", - "integrity": "sha512-NY92FUikE+wralaiVexFd5gwb7oJTIDhgTNeIw89i1Ymsgt4RWiPXfz3bg7hDy4NL6gepcThJwOYNtZO/eNi7Q==", + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "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": { - "alphanum-sort": "^1.0.2", - "browserslist": "^4.16.6", - "cssnano-utils": "^3.0.0", - "postcss-value-parser": "^4.2.0" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">= 8.9.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/postcss-minify-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.1.tgz", - "integrity": "sha512-TOzqOPXt91O2luJInaVPiivh90a2SIK5Nf1Ea7yEIM/5w+XA5BGrZGUSW8aEx9pJ/oNj7ZJBhjvigSiBV+bC1Q==", + "node_modules/schema-utils/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": { - "alphanum-sort": "^1.0.2", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "node_modules/schema-utils/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, - "engines": { - "node": "^10 || ^12 || >= 14" - }, "peerDependencies": { - "postcss": "^8.1.0" + "ajv": "^6.9.1" } }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "node_modules/schema-utils/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/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz", + "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==", "dev": true, "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" + "node-forge": "^1" }, "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">=10" } }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.4" + "lru-cache": "^6.0.0" }, - "engines": { - "node": "^10 || ^12 || >= 14" + "bin": { + "semver": "bin/semver.js" }, - "peerDependencies": { - "postcss": "^8.1.0" + "engines": { + "node": ">=10" } }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "node_modules/send": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", "dev": true, "dependencies": { - "icss-utils": "^5.0.0" + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "1.8.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" }, "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">= 0.8.0" } }, - "node_modules/postcss-nesting": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", - "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", + "node_modules/send/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": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" + "ms": "2.0.0" } }, - "node_modules/postcss-nesting/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "node_modules/send/node_modules/debug/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/postcss-nesting/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/send/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": ">= 0.6" } }, - "node_modules/postcss-nesting/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==", + "node_modules/send/node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "node_modules/send/node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/postcss-normalize-charset": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", - "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" + "bin": { + "mime": "cli.js" }, - "peerDependencies": { - "postcss": "^8.2.15" + "engines": { + "node": ">=4" } }, - "node_modules/postcss-normalize-display-values": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.2.tgz", - "integrity": "sha512-RxXoJPUR0shSjkMMzgEZDjGPrgXUVYyWA/YwQRicb48H15OClPuaDR7tYokLAlGZ2tCSENEN5WxjgxSD5m4cUw==", + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/send/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0" + "ee-first": "1.1.1" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 0.8" } }, - "node_modules/postcss-normalize-positions": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.2.tgz", - "integrity": "sha512-tqghWFVDp2btqFg1gYob1etPNxXLNh3uVeWgZE2AQGh6b2F8AK2Gj36v5Vhyh+APwIzNjmt6jwZ9pTBP+/OM8g==", + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "randombytes": "^2.1.0" } }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.2.tgz", - "integrity": "sha512-/rIZn8X9bBzC7KvY4iKUhXUGW3MmbXwfPF23jC9wT9xTi7kAvgj8sEgwxjixBmoL6MVa4WOgxNz2hAR6wTK8tw==", + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0" + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 0.8.0" } }, - "node_modules/postcss-normalize-string": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.2.tgz", - "integrity": "sha512-zaI1yzwL+a/FkIzUWMQoH25YwCYxi917J4pYm1nRXtdgiCdnlTkx5eRzqWEC64HtRa06WCJ9TIutpb6GmW4gFw==", + "node_modules/serve-index/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": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "ms": "2.0.0" } }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.2.tgz", - "integrity": "sha512-Ao0PP6MoYsRU1LxeVUW740ioknvdIUmfr6uAA3xWlQJ9s69/Tupy8qwhuKG3xWfl+KvLMAP9p2WXF9cwuk/7Bg==", + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 0.6" } }, - "node_modules/postcss-normalize-unicode": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.2.tgz", - "integrity": "sha512-3y/V+vjZ19HNcTizeqwrbZSUsE69ZMRHfiiyLAJb7C7hJtYmM4Gsbajy7gKagu97E8q5rlS9k8FhojA8cpGhWw==", + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "dependencies": { - "browserslist": "^4.16.6", - "postcss-value-parser": "^4.2.0" + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 0.6" } }, - "node_modules/postcss-normalize-url": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.4.tgz", - "integrity": "sha512-cNj3RzK2pgQQyNp7dzq0dqpUpQ/wYtdDZM3DepPmFjCmYIfceuD9VIAcOdvrNetjIU65g1B4uwdP/Krf6AFdXg==", + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/serve-index/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/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", "dev": true, "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 0.8.0" } }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.2.tgz", - "integrity": "sha512-CXBx+9fVlzSgbk0IXA/dcZn9lXixnQRndnsPC5ht3HxlQ1bVh77KQDL1GffJx1LTzzfae8ftMulsjYmO2yegxA==", + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0" + "kind-of": "^6.0.2" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=8" } }, - "node_modules/postcss-ordered-values": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.3.tgz", - "integrity": "sha512-T9pDS+P9bWeFvqivXd5ACzQmrCmHjv3ZP+djn8E1UZY7iK79pFSm7i3WbKw2VSmFmdbMm8sQ12OPcNpzBo3Z2w==", + "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==", "dev": true, "dependencies": { - "cssnano-utils": "^3.0.0", - "postcss-value-parser": "^4.2.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=8" } }, - "node_modules/postcss-overflow-shorthand": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", - "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", + "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==", "dev": true, - "dependencies": { - "postcss": "^7.0.2" - }, "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, - "node_modules/postcss-overflow-shorthand/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-overflow-shorthand/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-overflow-shorthand/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==", - "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==", + "dev": true + }, + "node_modules/simplebar": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/simplebar/-/simplebar-5.3.6.tgz", + "integrity": "sha512-FJUMbV+hNDd/m+1/fvD41TXKd5mSdlI5zgBygkaQIV3SffNbcLhSbJT6ufTs8ZNRLJ6i+qc/KCFMqWmvlGWMhA==", + "dependencies": { + "@juggle/resize-observer": "^3.3.1", + "can-use-dom": "^0.1.0", + "core-js": "^3.0.1", + "lodash.debounce": "^4.0.8", + "lodash.memoize": "^4.1.2", + "lodash.throttle": "^4.1.1" } }, - "node_modules/postcss-page-break": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", - "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", - "dev": true, + "node_modules/simplebar-angular": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/simplebar-angular/-/simplebar-angular-2.3.6.tgz", + "integrity": "sha512-chSUdCYCLOdajbCA73oL/OU+H/YFNGGdAYkcYx76YDY81C3sj3vMePjuW8cPgZZHwSCGI+opcl6xoBsCK56fJA==", "dependencies": { - "postcss": "^7.0.2" + "simplebar": "^5.3.6", + "tslib": "^1.9.0" + }, + "peerDependencies": { + "@angular/common": "^8.1.3", + "@angular/core": "^8.1.3" } }, - "node_modules/postcss-page-break/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true + "node_modules/simplebar-angular/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, - "node_modules/postcss-page-break/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, "engines": { - "node": ">=6.0.0" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-page-break/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==", + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 6.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/postcss-place": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", - "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", + "node_modules/socket.io": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", + "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==", "dev": true, "dependencies": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.1.0", + "socket.io-adapter": "~2.3.3", + "socket.io-parser": "~4.0.4" }, "engines": { - "node": ">=6.0.0" + "node": ">=10.0.0" } }, - "node_modules/postcss-place/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "node_modules/socket.io-adapter": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", + "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==", "dev": true }, - "node_modules/postcss-place/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/socket.io-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" }, "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": ">=10.0.0" } }, - "node_modules/postcss-place/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==", + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-preset-env": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", - "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", - "dev": true, - "dependencies": { - "autoprefixer": "^9.6.1", - "browserslist": "^4.6.4", - "caniuse-lite": "^1.0.30000981", - "css-blank-pseudo": "^0.1.4", - "css-has-pseudo": "^0.10.0", - "css-prefers-color-scheme": "^3.1.1", - "cssdb": "^4.4.0", - "postcss": "^7.0.17", - "postcss-attribute-case-insensitive": "^4.0.1", - "postcss-color-functional-notation": "^2.0.1", - "postcss-color-gray": "^5.0.0", - "postcss-color-hex-alpha": "^5.0.3", - "postcss-color-mod-function": "^3.0.3", - "postcss-color-rebeccapurple": "^4.0.1", - "postcss-custom-media": "^7.0.8", - "postcss-custom-properties": "^8.0.11", - "postcss-custom-selectors": "^5.1.2", - "postcss-dir-pseudo-class": "^5.0.0", - "postcss-double-position-gradients": "^1.0.0", - "postcss-env-function": "^2.0.2", - "postcss-focus-visible": "^4.0.0", - "postcss-focus-within": "^3.0.0", - "postcss-font-variant": "^4.0.0", - "postcss-gap-properties": "^2.0.0", - "postcss-image-set-function": "^3.0.1", - "postcss-initial": "^3.0.0", - "postcss-lab-function": "^2.0.1", - "postcss-logical": "^3.0.0", - "postcss-media-minmax": "^4.0.0", - "postcss-nesting": "^7.0.0", - "postcss-overflow-shorthand": "^2.0.0", - "postcss-page-break": "^2.0.0", - "postcss-place": "^4.0.1", - "postcss-pseudo-class-any-link": "^6.0.0", - "postcss-replace-overflow-wrap": "^3.0.0", - "postcss-selector-matches": "^4.0.0", - "postcss-selector-not": "^4.0.0" + "dependencies": { + "ms": "2.1.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/postcss-preset-env/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-preset-env/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" } }, - "node_modules/postcss-preset-env/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==", + "node_modules/socks": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", "dev": true, + "dependencies": { + "ip": "^1.1.5", + "smart-buffer": "^4.2.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0", + "npm": ">= 3.0.0" } }, - "node_modules/postcss-pseudo-class-any-link": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", - "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", + "node_modules/socks-proxy-agent": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", + "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", "dev": true, "dependencies": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" }, "engines": { - "node": ">=6.0.0" + "node": ">= 10" } }, - "node_modules/postcss-pseudo-class-any-link/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", + "node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, "engines": { - "node": ">=4" + "node": ">= 8" } }, - "node_modules/postcss-pseudo-class-any-link/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/postcss-pseudo-class-any-link/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/source-map-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.1.tgz", + "integrity": "sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "abab": "^2.0.5", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.1" }, "engines": { - "node": ">=6.0.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" } }, - "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "dependencies": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.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==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/postcss-pseudo-class-any-link/node_modules/source-map": { + "node_modules/source-map-support/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==", @@ -11925,406 +10647,295 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-reduce-initial": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.2.tgz", - "integrity": "sha512-v/kbAAQ+S1V5v9TJvbGkV98V2ERPdU6XvMcKMjqAlYiJ2NtsHGlKYLPjWWcXlaTKNxooId7BGxeraK8qXvzKtw==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true }, - "node_modules/postcss-reduce-transforms": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.2.tgz", - "integrity": "sha512-25HeDeFsgiPSUx69jJXZn8I06tMxLQJJNF5h7i9gsUg8iP4KOOJ8EX8fj3seeoLt3SLU2YDD6UPnDYVGUO7DEA==", + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0" + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=6.0.0" } }, - "node_modules/postcss-replace-overflow-wrap": { + "node_modules/spdy-transport": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", - "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, "dependencies": { - "postcss": "^7.0.2" + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" } }, - "node_modules/postcss-replace-overflow-wrap/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "node_modules/postcss-replace-overflow-wrap/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "minipass": "^3.1.1" }, "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": ">= 8" } }, - "node_modules/postcss-replace-overflow-wrap/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==", + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/postcss-selector-matches": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", - "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", + "node_modules/streamroller": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.6.tgz", + "integrity": "sha512-Qz32plKq/MZywYyhEatxyYc8vs994Gz0Hu2MSYXXLD233UyPeIeRBZARIIGwFer4Mdb8r3Y2UqKkgyDghM6QCg==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" + "date-format": "^4.0.6", + "debug": "^4.3.4", + "fs-extra": "^10.0.1" + }, + "engines": { + "node": ">=8.0" } }, - "node_modules/postcss-selector-matches/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-selector-matches/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/streamroller/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "ms": "2.1.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=6.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-selector-matches/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==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/postcss-selector-not": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz", - "integrity": "sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ==", + "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==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" + "safe-buffer": "~5.2.0" } }, - "node_modules/postcss-selector-not/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true + "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==", + "dev": true, + "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/postcss-selector-not/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "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==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": ">=8" } }, - "node_modules/postcss-selector-not/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==", + "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==", "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/postcss-selector-parser": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz", - "integrity": "sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==", + "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==", "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/postcss-svgo": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.3.tgz", - "integrity": "sha512-41XZUA1wNDAZrQ3XgWREL/M2zSw8LJPvb5ZWivljBsUQAGoEKMYm6okHsTjJxKYI4M75RQEH4KYlEM52VwdXVA==", + "node_modules/stylus": { + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.56.0.tgz", + "integrity": "sha512-Ev3fOb4bUElwWu4F9P9WjnnaSpc8XB9OFHSFZSKMFL1CE1oM+oFXWEgAqPmmZIyhBihuqIQlFsVTypiiS9RxeA==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.1.0", - "svgo": "^2.7.0" + "css": "^3.0.0", + "debug": "^4.3.2", + "glob": "^7.1.6", + "safer-buffer": "^2.1.2", + "sax": "~1.2.4", + "source-map": "^0.7.3" }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "bin": { + "stylus": "bin/stylus" }, - "peerDependencies": { - "postcss": "^8.2.15" + "engines": { + "node": "*" } }, - "node_modules/postcss-unique-selectors": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.2.tgz", - "integrity": "sha512-w3zBVlrtZm7loQWRPVC0yjUwwpty7OM6DnEHkxcSQXO1bMS3RJ+JUS5LFMSDZHJcvGsRwhZinCWVqn8Kej4EDA==", + "node_modules/stylus-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-6.2.0.tgz", + "integrity": "sha512-5dsDc7qVQGRoc6pvCL20eYgRUxepZ9FpeK28XhdXaIPP6kXr6nI1zAAKFQgP5OBkOfKaURp4WUpJzspg1f01Gg==", "dev": true, "dependencies": { - "alphanum-sort": "^1.0.2", - "postcss-selector-parser": "^6.0.5" + "fast-glob": "^3.2.7", + "klona": "^2.0.4", + "normalize-path": "^3.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "postcss": "^8.2.15" + "stylus": ">=0.52.4", + "webpack": "^5.0.0" } }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/postcss-values-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", - "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", + "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==", "dev": true, "dependencies": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=6.14.4" + "node": ">=4" } }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "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==", "dev": true, "engines": { - "node": ">=6" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/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==", - "dev": true - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", "dev": true, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, "engines": { - "node": ">=10" + "node": ">=0.10" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "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==", - "dev": true, - "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==", + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, "engines": { "node": ">=6" } }, - "node_modules/qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "dev": true, - "engines": { - "node": ">=0.9" - } - }, - "node_modules/qs": { - "version": "6.9.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", - "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==", - "dev": true, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", "dev": true, "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">= 10" } }, - "node_modules/raw-body": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", - "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "node_modules/terser": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.11.0.tgz", + "integrity": "sha512-uCA9DLanzzWSsN1UirKwylhhRz3aKPInlfmpGfw8VN6jHsAtu8HJtIpeeHHK23rxnE/cDc+yvmq5wqkIC6Kn0A==", "dev": true, "dependencies": { - "bytes": "3.1.1", - "http-errors": "1.8.1", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" }, "engines": { - "node": ">= 0.8" + "node": ">=10" } }, - "node_modules/raw-loader": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", - "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", + "node_modules/terser-webpack-plugin": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", "dev": true, "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" + "jest-worker": "^27.0.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.0" }, "engines": { "node": ">= 10.13.0" @@ -12334,10 +10945,10 @@ "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "webpack": "^5.1.0" } }, - "node_modules/raw-loader/node_modules/ajv": { + "node_modules/terser-webpack-plugin/node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", @@ -12353,7 +10964,7 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/raw-loader/node_modules/ajv-keywords": { + "node_modules/terser-webpack-plugin/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==", @@ -12362,13 +10973,13 @@ "ajv": "^6.9.1" } }, - "node_modules/raw-loader/node_modules/json-schema-traverse": { + "node_modules/terser-webpack-plugin/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/raw-loader/node_modules/schema-utils": { + "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==", @@ -12386,541 +10997,501 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", - "dev": true, - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "node_modules/terser-webpack-plugin/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==", "dev": true, - "dependencies": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "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==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } + "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 }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "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==", "dev": true, "dependencies": { - "picomatch": "^2.2.1" + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" }, "engines": { - "node": ">=8.10.0" + "node": ">=8" } }, - "node_modules/reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "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/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, - "node_modules/regenerate-unicode-properties": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", - "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "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": { - "regenerate": "^1.4.2" + "os-tmpdir": "~1.0.2" }, "engines": { - "node": ">=4" + "node": ">=0.6.0" } }, - "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==", + "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=", "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" + "engines": { + "node": ">=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==", + "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==", "dev": true, "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "is-number": "^7.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0" } }, - "node_modules/regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", - "dev": true - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", - "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.6" } }, - "node_modules/regexpu-core": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", - "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", + "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==", "dev": true, - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^9.0.0", - "regjsgen": "^0.5.2", - "regjsparser": "^0.7.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" + "bin": { + "tree-kill": "cli.js" } }, - "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/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" }, - "node_modules/regjsparser": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", - "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", + "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==", "dev": true, - "dependencies": { - "jsesc": "~0.5.0" + "engines": { + "node": ">=10" }, - "bin": { - "regjsparser": "bin/parser" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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=", + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, - "bin": { - "jsesc": "bin/jsesc" + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" } }, - "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=", + "node_modules/typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", "dev": true }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "node_modules/typescript": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4.2.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=", + "node_modules/ua-parser-js": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", + "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], "engines": { - "node": ">=0.10" + "node": "*" } }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "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" - }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, "engines": { - "node": ">= 6" + "node": ">=4" } }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, "engines": { - "node": ">=0.6" + "node": ">=4" } }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", "dev": true, - "bin": { - "uuid": "bin/uuid" + "engines": { + "node": ">=4" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "unique-slug": "^2.0.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": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "dev": true, "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "imurmurhash": "^0.1.4" } }, - "node_modules/resolve-cwd": { + "node_modules/universalify": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, - "dependencies": { - "resolve-from": "^3.0.0" - }, "engines": { - "node": ">=4" + "node": ">= 10.0.0" } }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "dev": true, "engines": { - "node": ">=4" + "node": ">= 0.8" } }, - "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==", + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "punycode": "^2.1.0" } }, - "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", + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "node_modules/resolve-url-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", - "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", "dev": true, - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^7.0.35", - "source-map": "0.6.1" - }, "engines": { - "node": ">=8.9" - }, - "peerDependencies": { - "rework": "1.0.1", - "rework-visit": "1.0.0" - }, - "peerDependenciesMeta": { - "rework": { - "optional": true - }, - "rework-visit": { - "optional": true - } + "node": ">= 0.4.0" } }, - "node_modules/resolve-url-loader/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } }, - "node_modules/resolve-url-loader/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, + "builtins": "^1.0.3" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true, "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": ">= 0.8" } }, - "node_modules/resolve-url-loader/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==", + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", "dev": true, "engines": { "node": ">=0.10.0" } }, - "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==", + "node_modules/watchpack": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", "dev": true, "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" }, "engines": { - "node": ">=8" + "node": ">=10.13.0" } }, - "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==", + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, - "engines": { - "node": ">=0.12" + "dependencies": { + "minimalistic-assert": "^1.0.0" } }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "dependencies": { + "defaults": "^1.0.3" } }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/webpack": { + "version": "5.70.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.70.0.tgz", + "integrity": "sha512-ZMWWy8CeuTTjCxbeaQI21xSswseF2oNOwc70QSKNePvmxE7XW36i7vpBMYZFAUHPwQiEbNGCEYIOOlyRbdGmxw==", "dev": true, "dependencies": { - "glob": "^7.1.3" + "@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.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.9.2", + "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-better-errors": "^1.0.2", + "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.3.1", + "webpack-sources": "^3.2.3" }, "bin": { - "rimraf": "bin.js" + "webpack": "bin/webpack.js" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true } - ], - "dependencies": { - "queue-microtask": "^1.2.2" } }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "node_modules/webpack-dev-middleware": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.0.tgz", + "integrity": "sha512-MouJz+rXAm9B1OTOYaJnn6rtD/lWZPy2ufQCH3BPs8Rloh/Du6Jze4p7AeLYHkVi0giJnYLaSGDC7S+GM9arhg==", + "dev": true, "dependencies": { - "tslib": "^1.9.0" + "colorette": "^2.0.10", + "memfs": "^3.2.2", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" }, "engines": { - "npm": ">=2.0.0" + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "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==", - "dev": true - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, "dependencies": { - "ret": "~0.1.10" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sass": { - "version": "1.35.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.35.1.tgz", - "integrity": "sha512-oCisuQJstxMcacOPmxLNiLlj4cUyN2+8xJnG7VanRoh2GOLr9RqkvI4AxA4a6LHVg/rsu+PmxXeGhrdSF9jCiQ==", + "node_modules/webpack-dev-server": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.3.tgz", + "integrity": "sha512-mlxq2AsIw2ag016nixkzUkdyOE8ST2GTy34uKSABp1c4nhjZvH90D5ZRR+UOLSsG4Z3TFahAi72a3ymRtfRm+Q==", "dev": true, "dependencies": { - "chokidar": ">=3.0.0 <4.0.0" + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/serve-index": "^1.9.1", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.2.2", + "ansi-html-community": "^0.0.8", + "bonjour": "^3.5.0", + "chokidar": "^3.5.2", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "default-gateway": "^6.0.3", + "del": "^6.0.0", + "express": "^4.17.1", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.0", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "portfinder": "^1.0.28", + "schema-utils": "^4.0.0", + "selfsigned": "^2.0.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "spdy": "^4.0.2", + "strip-ansi": "^7.0.0", + "webpack-dev-middleware": "^5.3.0", + "ws": "^8.1.0" }, "bin": { - "sass": "sass.js" + "webpack-dev-server": "bin/webpack-dev-server.js" }, "engines": { - "node": ">=8.9.0" + "node": ">= 12.13.0" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "node_modules/sass-loader": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.1.0.tgz", - "integrity": "sha512-FVJZ9kxVRYNZTIe2xhw93n3xJNYZADr+q69/s98l9nTCrWASo+DR2Ot0s5xTKQDDEosUkatsGeHxcH4QBp5bSg==", + "node_modules/webpack-dev-server/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, "dependencies": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" }, "engines": { "node": ">= 12.13.0" @@ -12928,50 +11499,67 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0", - "sass": "^1.3.0", - "webpack": "^5.0.0" + "engines": { + "node": ">=12" }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } }, - "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==", + "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, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" + "typed-assert": "^1.0.8" }, "engines": { - "node": ">= 8.9.0" + "node": ">= 12" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } } }, - "node_modules/schema-utils/node_modules/ajv": { + "node_modules/webpack/node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", @@ -12987,7 +11575,7 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/schema-utils/node_modules/ajv-keywords": { + "node_modules/webpack/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==", @@ -12996,5338 +11584,5428 @@ "ajv": "^6.9.1" } }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { + "node_modules/webpack/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/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "node_modules/selfsigned": { - "version": "1.10.14", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz", - "integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", + "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, "dependencies": { - "node-forge": "^0.10.0" - } - }, - "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">=10" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "1.8.1", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">=0.8.0" } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true, - "dependencies": { - "ms": "2.0.0" + "engines": { + "node": ">=0.8.0" } }, - "node_modules/send/node_modules/debug/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/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "bin": { - "mime": "cli.js" + "dependencies": { + "isexe": "^2.0.0" }, - "engines": { - "node": ">=4" + "bin": { + "which": "bin/which" } }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, "dependencies": { - "randombytes": "^2.1.0" + "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "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==", "dev": true, "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "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==", "dev": true, "dependencies": { - "ms": "2.0.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "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==", "dev": true, "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.6" + "node": ">=7.0.0" } }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "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==", "dev": true }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "node_modules/serve-static": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", - "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "node_modules/ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.2" + "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/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, "engines": { - "node": ">= 0.8.0" + "node": ">=10" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "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==", + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "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": ">= 6" } }, - "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=", + "node_modules/yargs": { + "version": "17.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz", + "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/set-value/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=", + "node_modules/yargs-parser": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, "engines": { - "node": ">=8" - } - }, - "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" + "node": ">=10" }, - "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.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true - }, - "node_modules/simplebar": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/simplebar/-/simplebar-5.3.6.tgz", - "integrity": "sha512-FJUMbV+hNDd/m+1/fvD41TXKd5mSdlI5zgBygkaQIV3SffNbcLhSbJT6ufTs8ZNRLJ6i+qc/KCFMqWmvlGWMhA==", - "dependencies": { - "@juggle/resize-observer": "^3.3.1", - "can-use-dom": "^0.1.0", - "core-js": "^3.0.1", - "lodash.debounce": "^4.0.8", - "lodash.memoize": "^4.1.2", - "lodash.throttle": "^4.1.1" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/simplebar-angular": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/simplebar-angular/-/simplebar-angular-2.3.6.tgz", - "integrity": "sha512-chSUdCYCLOdajbCA73oL/OU+H/YFNGGdAYkcYx76YDY81C3sj3vMePjuW8cPgZZHwSCGI+opcl6xoBsCK56fJA==", + "node_modules/zone.js": { + "version": "0.11.5", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.5.tgz", + "integrity": "sha512-D1/7VxEuQ7xk6z/kAROe4SUbd9CzxY4zOwVGnGHerd/SgLIVU5f4esDzQUsOCeArn933BZfWMKydH7l7dPEp0g==", "dependencies": { - "simplebar": "^5.3.6", - "tslib": "^1.9.0" - }, - "peerDependencies": { - "@angular/common": "^8.1.3", - "@angular/core": "^8.1.3" - } - }, - "node_modules/simplebar-angular/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" + "tslib": "^2.3.0" } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-1.1.1.tgz", + "integrity": "sha512-YVAcA4DKLOj296CF5SrQ8cYiMRiUGc2sqFpLxsDGWE34suHqhGP/5yMsDHKsrh8hs8I5TiRVXNwKPWQpX3iGjw==", "dev": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "sourcemap-codec": "1.4.8" } }, - "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==", + "@angular-devkit/architect": { + "version": "0.1303.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.3.tgz", + "integrity": "sha512-WRVVBCzLlMqRZVhZXGASHzNJK/OCAvl/DTGhlLuJDIjF7lVGnXHjtwNM8ilYZq949OnC3fly5Z61TfhbN/OHCg==", "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" + "requires": { + "@angular-devkit/core": "13.3.3", + "rxjs": "6.6.7" }, - "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" + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "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/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" + "@angular-devkit/build-angular": { + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.3.3.tgz", + "integrity": "sha512-iEpNF3tF+9Gw+qQKL63fPFHIvWokJdrgVU4GzENQ5QeL8zk8iYTEbH3jWogq5tWy5+VmNP/mKkasq9i78lRiYw==", + "dev": true, + "requires": { + "@ampproject/remapping": "1.1.1", + "@angular-devkit/architect": "0.1303.3", + "@angular-devkit/build-webpack": "0.1303.3", + "@angular-devkit/core": "13.3.3", + "@babel/core": "7.16.12", + "@babel/generator": "7.16.8", + "@babel/helper-annotate-as-pure": "7.16.7", + "@babel/plugin-proposal-async-generator-functions": "7.16.8", + "@babel/plugin-transform-async-to-generator": "7.16.8", + "@babel/plugin-transform-runtime": "7.16.10", + "@babel/preset-env": "7.16.11", + "@babel/runtime": "7.16.7", + "@babel/template": "7.16.7", + "@discoveryjs/json-ext": "0.5.6", + "@ngtools/webpack": "13.3.3", + "ansi-colors": "4.1.1", + "babel-loader": "8.2.3", + "babel-plugin-istanbul": "6.1.1", + "browserslist": "^4.9.1", + "cacache": "15.3.0", + "circular-dependency-plugin": "5.2.2", + "copy-webpack-plugin": "10.2.1", + "core-js": "3.20.3", + "critters": "0.0.16", + "css-loader": "6.5.1", + "esbuild": "0.14.22", + "esbuild-wasm": "0.14.22", + "glob": "7.2.0", + "https-proxy-agent": "5.0.0", + "inquirer": "8.2.0", + "jsonc-parser": "3.0.0", + "karma-source-map-support": "1.4.0", + "less": "4.1.2", + "less-loader": "10.2.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.0", + "mini-css-extract-plugin": "2.5.3", + "minimatch": "3.0.5", + "open": "8.4.0", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "6.0.1", + "piscina": "3.2.0", + "postcss": "8.4.5", + "postcss-import": "14.0.2", + "postcss-loader": "6.2.1", + "postcss-preset-env": "7.2.3", + "regenerator-runtime": "0.13.9", + "resolve-url-loader": "5.0.0", + "rxjs": "6.6.7", + "sass": "1.49.9", + "sass-loader": "12.4.0", + "semver": "7.3.5", + "source-map-loader": "3.0.1", + "source-map-support": "0.5.21", + "stylus": "0.56.0", + "stylus-loader": "6.2.0", + "terser": "5.11.0", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "tslib": "2.3.1", + "webpack": "5.70.0", + "webpack-dev-middleware": "5.3.0", + "webpack-dev-server": "4.7.3", + "webpack-merge": "5.8.0", + "webpack-subresource-integrity": "5.1.0" }, - "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" + "postcss": { + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", + "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", + "dev": true, + "requires": { + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.1" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "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/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=", + "@angular-devkit/build-webpack": { + "version": "0.1303.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1303.3.tgz", + "integrity": "sha512-v/z/YgwrAzYn1LfN9OHNxqcThyyg4LLx28hmHzDs5gyDShAK189y34EoT9uQ+lCyQrPVhP7UKACCxCdSwOEJiA==", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" + "requires": { + "@angular-devkit/architect": "0.1303.3", + "rxjs": "6.6.7" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/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" + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "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/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=", + "@angular-devkit/core": { + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.3.tgz", + "integrity": "sha512-lfQwY9LuVRwcNVzGmyPcwOpb3CAobP4T+c3joR1LLIPS5lzcM0oeCE2bon9N52Ktn4Q/pH98dVtjWL+jSrUADw==", "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" + "requires": { + "ajv": "8.9.0", + "ajv-formats": "2.1.1", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.7", + "source-map": "0.7.3" }, - "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" + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "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/snapdragon/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=", + "@angular-devkit/schematics": { + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.3.tgz", + "integrity": "sha512-S8UNlw6IoR/kxBYbiwesuA7oJGSnFkD6bJwVLhpHdT6Sqrz2/IrjHcNgTJRAvhsOKIbfDtMtXRzl/PUdWEfgyw==", "dev": true, - "dependencies": { - "kind-of": "^3.0.2" + "requires": { + "@angular-devkit/core": "13.3.3", + "jsonc-parser": "3.0.0", + "magic-string": "0.25.7", + "ora": "5.4.1", + "rxjs": "6.6.7" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/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" + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "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/snapdragon/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" + "@angular/animations": { + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-13.3.3.tgz", + "integrity": "sha512-rP1e0XYjHxPCnvSN3k0ZCBTfIvpKbFI8fxlZMD85PI9HAko5Dc1Y5XCWrcMzdCF4C5nfqbzfzuZke5H3Y46AVQ==", + "requires": { + "tslib": "^2.3.0" } }, - "node_modules/snapdragon/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" + "@angular/cdk": { + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-13.3.3.tgz", + "integrity": "sha512-dzd31mta2VwffxbeO4CelMqb7WswLnkC/r2QZXySnc0CTmj44HqXkqdZuEvVgxaKRVpxsYeuBuhhhy8U00YMOw==", + "requires": { + "parse5": "^5.0.0", + "tslib": "^2.3.0" } }, - "node_modules/snapdragon/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==", + "@angular/cli": { + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.3.3.tgz", + "integrity": "sha512-a+nnzFP1FfnypXpAhrHbIBaJcxzegWLZUvVzJQwt6P2z60IoHdvTVmyNbY89qI0LE1SrAokEUO1zW3Yjmu7fUw==", "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" + "requires": { + "@angular-devkit/architect": "0.1303.3", + "@angular-devkit/core": "13.3.3", + "@angular-devkit/schematics": "13.3.3", + "@schematics/angular": "13.3.3", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.1", + "debug": "4.3.3", + "ini": "2.0.0", + "inquirer": "8.2.0", + "jsonc-parser": "3.0.0", + "npm-package-arg": "8.1.5", + "npm-pick-manifest": "6.1.1", + "open": "8.4.0", + "ora": "5.4.1", + "pacote": "12.0.3", + "resolve": "1.22.0", + "semver": "7.3.5", + "symbol-observable": "4.0.0", + "uuid": "8.3.2" } }, - "node_modules/snapdragon/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=", - "dev": true, - "engines": { - "node": ">=0.10.0" + "@angular/common": { + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.3.3.tgz", + "integrity": "sha512-W5rZyuilGAA+tHoTbvHHu11efUBssiiX9BKg2rQAwbdnG+hZfNs0ze28Y+2bwjTDkbLsXsQwm30gs2uie7aMyA==", + "requires": { + "tslib": "^2.3.0" } }, - "node_modules/snapdragon/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" + "@angular/compiler": { + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.3.3.tgz", + "integrity": "sha512-Ynv6md2acZSztl1SZ/mZkIgSxGLruAw8OvSb619FsVINUWHTfLraIAY618oO9K2iPuLY4ixL7BR9ymeW4p8kTw==", + "requires": { + "tslib": "^2.3.0" } }, - "node_modules/snapdragon/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/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=", + "@angular/compiler-cli": { + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.3.3.tgz", + "integrity": "sha512-mX2fusiRMUWvXEtfFz/G/tnWiM9a+QpLVSPITpobnKUXMD6pgSh4PGsfHplx4Qbmxz6AqwPZ0wUMSDTopcbW+w==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/core": "^7.17.2", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "dependency-graph": "^0.11.0", + "magic-string": "^0.26.0", + "reflect-metadata": "^0.1.2", + "semver": "^7.0.0", + "sourcemap-codec": "^1.4.8", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", + "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.0" + } + }, + "@babel/core": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.9.tgz", + "integrity": "sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.9", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helpers": "^7.17.9", + "@babel/parser": "^7.17.9", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.9", + "@babel/types": "^7.17.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "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==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz", + "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==", + "dev": true, + "requires": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "magic-string": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.1.tgz", + "integrity": "sha512-ndThHmvgtieXe8J/VGPjG+Apu7v7ItcD5mhEIvOscWjPF/ccOiLxHaSuCAS2G+3x4GKsAbT8u7zdyamupui8Tg==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, - "node_modules/snapdragon/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" + "@angular/core": { + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.3.3.tgz", + "integrity": "sha512-zVsAuR1qT2QEUXDk8ANs+pCnxH7ckKAD+rJXoxI1Br94Ey1o7lNXu/GPJtTqxDbsRd7sGqMMQRti36t2CA5QhA==", + "requires": { + "tslib": "^2.3.0" } }, - "node_modules/socket.io": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", - "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.1.0", - "socket.io-adapter": "~2.3.3", - "socket.io-parser": "~4.0.4" - }, - "engines": { - "node": ">=10.0.0" + "@angular/forms": { + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.3.3.tgz", + "integrity": "sha512-C89b7Uu7Acpm+0/JDczIqhNJTEJPdskmnx7AybAoSfBPs9QUSP8irRFKY7UtmE8E/Q2m03xqWRDa8CpP9Rt6Hw==", + "requires": { + "tslib": "^2.3.0" } }, - "node_modules/socket.io-adapter": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", - "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==", + "@angular/material": { + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-13.3.3.tgz", + "integrity": "sha512-PkZ7VW3/7tqdBHSOOmq7com7Ir147OEe1+kfgF/G3y8WUutI9jY2cHKARXGWB+5WgcqKr7ol43u239UGkPfFHg==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/platform-browser": { + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.3.3.tgz", + "integrity": "sha512-feVOGwjAZOR4aObjcEaXsj1NH6021sv0bWKSGBVNrR0RuHBXVfF0vRPAhdq3IAL1OcutriHGR52KS7t5x+nChw==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/platform-browser-dynamic": { + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.3.3.tgz", + "integrity": "sha512-3sidxYGCRj/OdtYvCNipbNRsXbXgiIZW20exxKG6H2MG4uxfBJ3yh7gFs25rdYJezdxL4/vesHQhKFguBVIgbw==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/router": { + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.3.3.tgz", + "integrity": "sha512-8RMUPT5eLKgs+I72MD7vBXvdGwhxPzCAmICH6aUkq8qZKnbLh0Qeh4ZLM7xLH+b3HRrrT64fSrKP4CCGwAmA9Q==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", "dev": true }, - "node_modules/socket.io-parser": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", - "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dev": true, - "dependencies": { - "@types/component-emitter": "^1.2.10", - "component-emitter": "~1.3.0", - "debug": "~4.3.1" - }, - "engines": { - "node": ">=10.0.0" + "requires": { + "@babel/highlight": "^7.16.7" } }, - "node_modules/socket.io/node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "@babel/compat-data": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz", + "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==", + "dev": true + }, + "@babel/core": { + "version": "7.16.12", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz", + "integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==", "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.16.7", + "@babel/parser": "^7.16.12", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.10", + "@babel/types": "^7.16.8", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true + "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 + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true } } }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "@babel/generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", + "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", "dev": true, + "requires": { + "@babel/types": "^7.16.8", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, - "node_modules/sockjs-client": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.2.tgz", - "integrity": "sha512-ZzRxPBISQE7RpzlH4tKJMQbHM9pabHluk0WBaxAQ+wm/UieeBVBou0p4wVnSQGN9QmpAZygQ0cDIypWuqOFmFQ==", + "@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", "dev": true, - "dependencies": { - "debug": "^3.2.6", - "eventsource": "^1.0.7", - "faye-websocket": "^0.11.3", - "inherits": "^2.0.4", - "json3": "^3.3.3", - "url-parse": "^1.5.3" + "requires": { + "@babel/types": "^7.16.7" } }, - "node_modules/sockjs-client/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", + "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", "dev": true, - "dependencies": { - "ms": "^2.1.1" + "requires": { + "@babel/helper-explode-assignable-expression": "^7.16.7", + "@babel/types": "^7.16.7" } }, - "node_modules/socks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", + "@babel/helper-compilation-targets": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz", + "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==", "dev": true, - "dependencies": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", - "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", - "dev": true, "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.1", - "socks": "^2.6.1" - }, - "engines": { - "node": ">= 10" + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "@babel/helper-create-class-features-plugin": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz", + "integrity": "sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==", "dev": true, - "engines": { - "node": ">= 8" + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" } }, - "node_modules/source-map-js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", - "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "@babel/helper-create-regexp-features-plugin": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", + "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "regexpu-core": "^5.0.1" } }, - "node_modules/source-map-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.0.tgz", - "integrity": "sha512-GKGWqWvYr04M7tn8dryIWvb0s8YM41z82iQv01yBtIylgxax0CwvSy6gc2Y02iuXwEfGWRlMicH0nvms9UZphw==", + "@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", "dev": true, - "dependencies": { - "abab": "^2.0.5", - "iconv-lite": "^0.6.2", - "source-map-js": "^0.6.2" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/source-map-loader/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "node_modules/source-map-resolve": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", - "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0" + "requires": { + "@babel/types": "^7.16.7" } }, - "node_modules/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==", + "@babel/helper-explode-assignable-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", + "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "requires": { + "@babel/types": "^7.16.7" } }, - "node_modules/source-map-support/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==", + "@babel/helper-function-name": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", + "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/template": "^7.16.7", + "@babel/types": "^7.17.0" } }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "dev": true - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", "dev": true, - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" + "requires": { + "@babel/types": "^7.16.7" } }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "@babel/helper-member-expression-to-functions": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", + "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", "dev": true, - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" + "requires": { + "@babel/types": "^7.17.0" } }, - "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==", + "@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/types": "^7.16.7" } }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "@babel/helper-module-transforms": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", + "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", "dev": true, - "dependencies": { - "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" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" } }, - "node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" + "requires": { + "@babel/types": "^7.16.7" } }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", "dev": true }, - "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=", + "@babel/helper-remap-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" } }, - "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=", + "@babel/helper-replace-supers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" } }, - "node_modules/static-extend/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=", + "@babel/helper-simple-access": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", + "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/types": "^7.17.0" } }, - "node_modules/static-extend/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=", + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/types": "^7.16.0" } }, - "node_modules/static-extend/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=", + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/types": "^7.16.7" } }, - "node_modules/static-extend/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=", + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-function-name": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" } }, - "node_modules/static-extend/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==", + "@babel/helpers": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", + "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", "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" + "requires": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.9", + "@babel/types": "^7.17.0" } }, - "node_modules/static-extend/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==", + "@babel/highlight": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", + "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" } }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "@babel/parser": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz", + "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", + "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", "dev": true, - "engines": { - "node": ">= 0.6" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" } }, - "node_modules/streamroller": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", - "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", + "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", "dev": true, - "dependencies": { - "date-format": "^2.1.0", - "debug": "^4.1.1", - "fs-extra": "^8.1.0" - }, - "engines": { - "node": ">=8.0" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.7" } }, - "node_modules/streamroller/node_modules/date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", + "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", "dev": true, - "engines": { - "node": ">=4.0" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8", + "@babel/plugin-syntax-async-generators": "^7.8.4" } }, - "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==", + "@babel/plugin-proposal-class-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", + "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, - "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==", - "dev": true, - "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-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==", + "@babel/plugin-proposal-class-static-block": { + "version": "7.17.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz", + "integrity": "sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==", "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" + "requires": { + "@babel/helper-create-class-features-plugin": "^7.17.6", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, - "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==", + "@babel/plugin-proposal-dynamic-import": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", + "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, - "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=", + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", + "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, - "node_modules/style-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", - "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "@babel/plugin-proposal-json-strings": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", + "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" } }, - "node_modules/style-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", + "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", "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" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, - "node_modules/style-loader/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==", + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", + "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, - "node_modules/style-loader/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/style-loader/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==", + "@babel/plugin-proposal-numeric-separator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", + "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", "dev": 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" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, - "node_modules/stylehacks": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", - "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz", + "integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==", "dev": true, - "dependencies": { - "browserslist": "^4.16.0", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "requires": { + "@babel/compat-data": "^7.17.0", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.7" } }, - "node_modules/stylus": { - "version": "0.54.8", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.8.tgz", - "integrity": "sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg==", + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", + "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", "dev": true, - "dependencies": { - "css-parse": "~2.0.0", - "debug": "~3.1.0", - "glob": "^7.1.6", - "mkdirp": "~1.0.4", - "safer-buffer": "^2.1.2", - "sax": "~1.2.4", - "semver": "^6.3.0", - "source-map": "^0.7.3" - }, - "bin": { - "stylus": "bin/stylus" - }, - "engines": { - "node": "*" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, - "node_modules/stylus-loader": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-6.1.0.tgz", - "integrity": "sha512-qKO34QCsOtSJrXxQQmXsPeaVHh6hMumBAFIoJTcsSr2VzrA6o/CW9HCGR8spCjzJhN8oKQHdj/Ytx0wwXyElkw==", + "@babel/plugin-proposal-optional-chaining": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", + "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", "dev": true, - "dependencies": { - "fast-glob": "^3.2.5", - "klona": "^2.0.4", - "normalize-path": "^3.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "stylus": ">=0.52.4", - "webpack": "^5.0.0" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, - "node_modules/stylus/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "@babel/plugin-proposal-private-methods": { + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", + "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", "dev": true, - "dependencies": { - "ms": "2.0.0" + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.10", + "@babel/helper-plugin-utils": "^7.16.7" } }, - "node_modules/stylus/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/stylus/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", + "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } }, - "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==", + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", + "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, - "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "@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, - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, - "engines": { - "node": ">=0.10" + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" } }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, - "engines": { - "node": ">=6" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "@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, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/terser": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", - "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", + "@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, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" } }, - "node_modules/terser-webpack-plugin": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz", - "integrity": "sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A==", + "@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, - "dependencies": { - "jest-worker": "^27.0.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.7.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "@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, - "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" + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" } }, - "node_modules/terser-webpack-plugin/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==", + "@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, - "peerDependencies": { - "ajv": "^6.9.1" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/terser-webpack-plugin/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/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==", + "@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, - "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" + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" } }, - "node_modules/terser-webpack-plugin/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==", + "@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==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "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 - }, - "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/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "node_modules/timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", - "dev": true - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "@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, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "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=", + "@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, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "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=", + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "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=", + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "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==", + "@babel/plugin-transform-arrow-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", + "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", "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" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" } }, - "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==", + "@babel/plugin-transform-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", + "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", + "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", "dev": true, - "engines": { - "node": ">=0.6" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" } }, - "node_modules/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==", + "@babel/plugin-transform-block-scoping": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", + "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" } }, - "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==", + "@babel/plugin-transform-classes": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", + "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", "dev": true, - "bin": { - "tree-kill": "cli.js" + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "globals": "^11.1.0" } }, - "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "@babel/plugin-transform-computed-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", + "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" } }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "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==", + "@babel/plugin-transform-destructuring": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz", + "integrity": "sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ==", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "@babel/plugin-transform-dotall-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", + "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", "dev": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, - "node_modules/typescript": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", - "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "@babel/plugin-transform-duplicate-keys": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", + "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" } }, - "node_modules/ua-parser-js": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", - "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", + "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "@babel/plugin-transform-for-of": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", + "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" } }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "@babel/plugin-transform-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", + "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "@babel/plugin-transform-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", + "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" } }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "@babel/plugin-transform-member-expression-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", + "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" } }, - "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==", + "@babel/plugin-transform-modules-amd": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", + "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", "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" + "requires": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, - "node_modules/union-value/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=", + "@babel/plugin-transform-modules-commonjs": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.9.tgz", + "integrity": "sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, - "node_modules/uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "@babel/plugin-transform-modules-systemjs": { + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz", + "integrity": "sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==", "dev": true, - "dependencies": { - "unique-slug": "^2.0.0" + "requires": { + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "@babel/plugin-transform-modules-umd": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", + "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" + "requires": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", + "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", "dev": true, - "engines": { - "node": ">= 0.8" + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7" } }, - "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=", + "@babel/plugin-transform-new-target": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", + "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" } }, - "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=", + "@babel/plugin-transform-object-super": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", + "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" } }, - "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=", + "@babel/plugin-transform-parameters": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", + "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" } }, - "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=", + "@babel/plugin-transform-property-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", + "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" } }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "@babel/plugin-transform-regenerator": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.17.9.tgz", + "integrity": "sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ==", "dev": true, - "engines": { - "node": ">=4", - "yarn": "*" + "requires": { + "regenerator-transform": "^0.15.0" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "@babel/plugin-transform-reserved-words": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", + "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", "dev": true, - "dependencies": { - "punycode": "^2.1.0" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" } }, - "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": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "@babel/plugin-transform-runtime": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.10.tgz", + "integrity": "sha512-9nwTiqETv2G7xI4RvXHNfpGdr8pAA+Q/YtN3yLK7OoK7n9OibVm/xymJ838a9A6E/IciOLPj82lZk0fW6O4O7w==", "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "semver": "^6.3.0" + }, "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "node_modules/url-parse": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.4.tgz", - "integrity": "sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg==", + "@babel/plugin-transform-shorthand-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", + "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", "dev": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" } }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - }, - "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==", + "@babel/plugin-transform-spread": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", + "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "@babel/plugin-transform-sticky-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", + "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", "dev": true, - "engines": { - "node": ">= 0.4.0" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" } }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "@babel/plugin-transform-template-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", + "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", "dev": true, - "bin": { - "uuid": "dist/bin/uuid" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" } }, - "node_modules/validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "@babel/plugin-transform-typeof-symbol": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", + "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", "dev": true, - "dependencies": { - "builtins": "^1.0.3" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" } }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "@babel/plugin-transform-unicode-escapes": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", + "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", "dev": true, - "engines": { - "node": ">= 0.8" + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" } }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "@babel/plugin-transform-unicode-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", + "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, - "node_modules/void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "@babel/preset-env": { + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz", + "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/compat-data": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-async-generator-functions": "^7.16.8", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-proposal-class-static-block": "^7.16.7", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.16.7", + "@babel/plugin-proposal-json-strings": "^7.16.7", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.16.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-private-methods": "^7.16.11", + "@babel/plugin-proposal-private-property-in-object": "^7.16.7", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@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-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.16.7", + "@babel/plugin-transform-async-to-generator": "^7.16.8", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.16.7", + "@babel/plugin-transform-classes": "^7.16.7", + "@babel/plugin-transform-computed-properties": "^7.16.7", + "@babel/plugin-transform-destructuring": "^7.16.7", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.16.7", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.16.7", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.16.7", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.16.7", + "@babel/plugin-transform-modules-commonjs": "^7.16.8", + "@babel/plugin-transform-modules-systemjs": "^7.16.7", + "@babel/plugin-transform-modules-umd": "^7.16.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", + "@babel/plugin-transform-new-target": "^7.16.7", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.16.7", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.16.7", + "@babel/plugin-transform-reserved-words": "^7.16.7", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.16.7", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.16.7", + "@babel/plugin-transform-typeof-symbol": "^7.16.7", + "@babel/plugin-transform-unicode-escapes": "^7.16.7", + "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.8", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.20.2", + "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==", + "dev": true + } } }, - "node_modules/watchpack": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", - "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" + "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" } }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "@babel/runtime": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", + "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", "dev": true, - "dependencies": { - "minimalistic-assert": "^1.0.0" + "requires": { + "regenerator-runtime": "^0.13.4" } }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "dev": true, - "dependencies": { - "defaults": "^1.0.3" + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" } }, - "node_modules/webpack": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.44.0.tgz", - "integrity": "sha512-I1S1w4QLoKmH19pX6YhYN0NiSXaWY8Ou00oA+aMcr9IUGeF5azns+IKBkfoAAG9Bu5zOIzZt/mN35OffBya8AQ==", + "@babel/traverse": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.9.tgz", + "integrity": "sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==", "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.7.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.9", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.9", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true + "dependencies": { + "@babel/generator": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz", + "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==", + "dev": true, + "requires": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true } } }, - "node_modules/webpack-dev-middleware": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.0.0.tgz", - "integrity": "sha512-9zng2Z60pm6A98YoRcA0wSxw1EYn7B7y5owX/Tckyt9KGyULTkLtiavjaXlWqOMkM0YtqGgL3PvMOFgyFLq8vw==", + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", "dev": true, - "dependencies": { - "colorette": "^1.2.2", - "mem": "^8.1.1", - "memfs": "^3.2.2", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" } }, - "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true + }, + "@csstools/postcss-progressive-custom-properties": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", "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" + "requires": { + "postcss-value-parser": "^4.2.0" } }, - "node_modules/webpack-dev-middleware/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==", + "@discoveryjs/json-ext": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz", + "integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==", + "dev": true + }, + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, + "@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==", "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" + "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" } }, - "node_modules/webpack-dev-middleware/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==", + "@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==", "dev": true }, - "node_modules/webpack-dev-middleware/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==", + "@jridgewell/resolve-uri": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", + "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", "dev": 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" + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/webpack-dev-server": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", - "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", + "@juggle/resize-observer": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.3.1.tgz", + "integrity": "sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw==" + }, + "@ngtools/webpack": { + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.3.3.tgz", + "integrity": "sha512-O6EzafKfFuvI3Ju941u7ANs0mT7YDdChbVRhVECCPWOTm3Klr73js3bnCDzaJlxZNjzlG/KeUu5ghrhbMrHjSw==", "dev": true, - "dependencies": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.8", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "sockjs-client": "^1.5.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 6.11.5" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } + "requires": {} }, - "node_modules/webpack-dev-server/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "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" + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" } }, - "node_modules/webpack-dev-server/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==", + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" } }, - "node_modules/webpack-dev-server/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" } }, - "node_modules/webpack-dev-server/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "@npmcli/git": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", + "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", "dev": true, + "requires": { + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + }, "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, - "node_modules/webpack-dev-server/node_modules/anymatch/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=", + "@npmcli/installed-package-contents": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" } }, - "node_modules/webpack-dev-server/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" } }, - "node_modules/webpack-dev-server/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" - } + "@npmcli/node-gyp": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", + "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", + "dev": true }, - "node_modules/webpack-dev-server/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=", + "@npmcli/promise-spawn": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", + "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "infer-owner": "^1.0.4" } }, - "node_modules/webpack-dev-server/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", + "@npmcli/run-script": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-2.0.0.tgz", + "integrity": "sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig==", "dev": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" + "requires": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "node-gyp": "^8.2.0", + "read-package-json-fast": "^2.0.1" } }, - "node_modules/webpack-dev-server/node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "@schematics/angular": { + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.3.tgz", + "integrity": "sha512-kX5ghVCmWHcMN+g0pUaFuIJzwrXsVnK4bfid8DckU4EEtfFSv3UA5I1QNJRgpCPxTPhNEAk+3ePN8nzDSjdU+w==", "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "requires": { + "@angular-devkit/core": "13.3.3", + "@angular-devkit/schematics": "13.3.3", + "jsonc-parser": "3.0.0" } }, - "node_modules/webpack-dev-server/node_modules/cliui/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==", + "@socket.io/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==", + "dev": true + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", "dev": true, - "engines": { - "node": ">=6" + "requires": { + "@types/connect": "*", + "@types/node": "*" } }, - "node_modules/webpack-dev-server/node_modules/cliui/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==", + "@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" + "requires": { + "@types/node": "*" } }, - "node_modules/webpack-dev-server/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==", + "@types/component-emitter": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==", "dev": true }, - "node_modules/webpack-dev-server/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "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" + "requires": { + "@types/node": "*" } }, - "node_modules/webpack-dev-server/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=", + "@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" } }, - "node_modules/webpack-dev-server/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" - } + "@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true }, - "node_modules/webpack-dev-server/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" - } + "@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", + "dev": true }, - "node_modules/webpack-dev-server/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "@types/eslint": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", + "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", "dev": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" } }, - "node_modules/webpack-dev-server/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "@types/eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@types/eslint": "*", + "@types/estree": "*" } }, - "node_modules/webpack-dev-server/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } + "@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 }, - "node_modules/webpack-dev-server/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=", + "@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" } }, - "node_modules/webpack-dev-server/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=", + "@types/express-serve-static-core": { + "version": "4.17.28", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", + "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" } }, - "node_modules/webpack-dev-server/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "@types/http-proxy": { + "version": "1.17.8", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", + "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@types/node": "*" } }, - "node_modules/webpack-dev-server/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" - } + "@types/jasmine": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.0.2.tgz", + "integrity": "sha512-mSPIWhDyQ4nzYdR6Ixy15VhVKMVw93mSUlQxxpVb4S9Hj90lBvg+7kkBw23uYcv8CESPPXit+u3cARYcPeC8Jg==", + "dev": true }, - "node_modules/webpack-dev-server/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==", + "@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/webpack-dev-server/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" - } + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true }, - "node_modules/webpack-dev-server/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" - } + "@types/node": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", + "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", + "dev": true }, - "node_modules/webpack-dev-server/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==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true }, - "node_modules/webpack-dev-server/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==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true }, - "node_modules/webpack-dev-server/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==", + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "@types/retry": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", + "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", + "dev": true + }, + "@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" + "requires": { + "@types/express": "*" } }, - "node_modules/webpack-dev-server/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=", + "@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "@types/mime": "^1", + "@types/node": "*" } }, - "node_modules/webpack-dev-server/node_modules/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==", + "@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "requires": { + "@types/node": "*" } }, - "node_modules/webpack-dev-server/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" + "requires": { + "@types/node": "*" } }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "@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, - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, - "node_modules/webpack-dev-server/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" - } + "@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 }, - "node_modules/webpack-dev-server/node_modules/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==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } + "@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 }, - "node_modules/webpack-dev-server/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" - } + "@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 }, - "node_modules/webpack-dev-server/node_modules/string-width/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==", + "@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, - "engines": { - "node": ">=6" + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" } }, - "node_modules/webpack-dev-server/node_modules/string-width/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" - } + "@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 }, - "node_modules/webpack-dev-server/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=", + "@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, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" + "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" } }, - "node_modules/webpack-dev-server/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==", + "@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, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" + "requires": { + "@xtuc/ieee754": "^1.2.0" } }, - "node_modules/webpack-dev-server/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=", + "@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, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@xtuc/long": "4.2.2" } }, - "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "@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 + }, + "@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, - "dependencies": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "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" } }, - "node_modules/webpack-dev-server/node_modules/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==", + "@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, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" + "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" } }, - "node_modules/webpack-dev-server/node_modules/wrap-ansi/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==", + "@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, - "engines": { - "node": ">=6" + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" } }, - "node_modules/webpack-dev-server/node_modules/wrap-ansi/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==", + "@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, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" + "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" } }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "@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, - "dependencies": { - "async-limiter": "~1.0.0" + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" } }, - "node_modules/webpack-dev-server/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "@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 + }, + "@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 + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, - "node_modules/webpack-dev-server/node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "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" + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" } }, - "node_modules/webpack-dev-server/node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true + }, + "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, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "requires": {} }, - "node_modules/webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", "dev": true, - "dependencies": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" + "requires": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" }, - "engines": { - "node": ">= 6" + "dependencies": { + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } } }, - "node_modules/webpack-log/node_modules/ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "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==", "dev": true, - "engines": { - "node": ">=6" + "requires": { + "debug": "4" } }, - "node_modules/webpack-log/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", "dev": true, - "bin": { - "uuid": "bin/uuid" + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + } } }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" } }, - "node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "ajv": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", "dev": true, - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" } }, - "node_modules/webpack-sources/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==", + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "ajv": "^8.0.0" } }, - "node_modules/webpack-subresource-integrity": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.5.2.tgz", - "integrity": "sha512-GBWYBoyalbo5YClwWop9qe6Zclp8CIXYGIz12OPclJhIrSplDxs1Ls1JDMH8xBPPrg1T6ISaTW9Y6zOrwEiAzw==", + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, - "dependencies": { - "webpack-sources": "^1.3.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "html-webpack-plugin": ">= 2.21.0 < 5", - "webpack": ">= 1.12.11 < 6" - }, - "peerDependenciesMeta": { - "html-webpack-plugin": { - "optional": true - } + "requires": { + "fast-deep-equal": "^3.1.3" } }, - "node_modules/webpack/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" - } + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true }, - "node_modules/webpack/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==", + "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==", "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" + "requires": { + "type-fest": "^0.21.3" } }, - "node_modules/webpack/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==", + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true }, - "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, - "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" - } + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, - "node_modules/webpack/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==", + "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==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "color-convert": "^1.9.0" } }, - "node_modules/webpack/node_modules/webpack-sources": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", - "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, - "dependencies": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10.13.0" + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "are-we-there-yet": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz", + "integrity": "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==", "dev": true, - "engines": { - "node": ">=0.8.0" + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" } }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "requires": { + "sprintf-js": "~1.0.2" } }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", "dev": true }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "array-union": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", + "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", + "dev": true + }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" + "requires": { + "lodash": "^4.17.14" } }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "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 }, - "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==", + "autoprefixer": { + "version": "10.4.4", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.4.tgz", + "integrity": "sha512-Tm8JxsB286VweiZ5F0anmbyGiNI3v3wGv3mz9W+cxEDYB/6jbnj6GM9H9mK3wIL8ftgl+C07Lcwb8PG5PCCPzA==", "dev": true, - "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" + "requires": { + "browserslist": "^4.20.2", + "caniuse-lite": "^1.0.30001317", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" } }, - "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==", + "babel-loader": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", + "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "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==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.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==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.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" } }, - "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==", - "dev": true - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "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==", + "dev": true, + "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" + } }, - "node_modules/ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true + "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 } } }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", "dev": true, - "engines": { - "node": ">=10" + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", "dev": true, - "engines": { - "node": ">= 6" + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1" } }, - "node_modules/yargs": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", - "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - }, - "engines": { - "node": ">=12" - } + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, - "node_modules/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", - "dev": true, - "engines": { - "node": ">=12" - } + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true }, - "node_modules/zone.js": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.4.tgz", - "integrity": "sha512-DDh2Ab+A/B+9mJyajPjHFPWfYU1H+pdun4wnnk0OcQTNjem1XQSZ2CDW+rfZEUDjv5M19SBqAkjZi0x5wuB5Qw==", - "dependencies": { - "tslib": "^2.0.0" - } - } - }, - "dependencies": { - "@angular-devkit/architect": { - "version": "0.1201.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1201.4.tgz", - "integrity": "sha512-hGO5NrZxV8Z7sILwokt7H+1sMf+5tJS9PJszvYlIBSzG0LBkOwwLQDb4MD42ATXFru57SXNqMZDVKoi1kTgxAw==", + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "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 + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "requires": { - "@angular-devkit/core": "12.1.4", - "rxjs": "6.6.7" - } - }, - "@angular-devkit/build-angular": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-12.1.4.tgz", - "integrity": "sha512-9kMdnaU2dr8o7gJpuBsEHLUpa6huF8uZQEd1+jhKfByEY/xTQo8qztvmbhFhrSfDvdYRygNHItpt3pYEoCEOig==", - "dev": true, - "requires": { - "@angular-devkit/architect": "0.1201.4", - "@angular-devkit/build-optimizer": "0.1201.4", - "@angular-devkit/build-webpack": "0.1201.4", - "@angular-devkit/core": "12.1.4", - "@babel/core": "7.14.6", - "@babel/generator": "7.14.5", - "@babel/helper-annotate-as-pure": "7.14.5", - "@babel/plugin-proposal-async-generator-functions": "7.14.7", - "@babel/plugin-transform-async-to-generator": "7.14.5", - "@babel/plugin-transform-runtime": "7.14.5", - "@babel/preset-env": "7.14.7", - "@babel/runtime": "7.14.6", - "@babel/template": "7.14.5", - "@discoveryjs/json-ext": "0.5.3", - "@jsdevtools/coverage-istanbul-loader": "3.0.5", - "@ngtools/webpack": "12.1.4", - "ansi-colors": "4.1.1", - "babel-loader": "8.2.2", - "browserslist": "^4.9.1", - "cacache": "15.2.0", - "caniuse-lite": "^1.0.30001032", - "circular-dependency-plugin": "5.2.2", - "copy-webpack-plugin": "9.0.0", - "core-js": "3.15.1", - "critters": "0.0.10", - "css-loader": "5.2.6", - "css-minimizer-webpack-plugin": "3.0.1", - "find-cache-dir": "3.3.1", - "glob": "7.1.7", - "https-proxy-agent": "5.0.0", - "inquirer": "8.1.1", - "jest-worker": "27.0.2", - "karma-source-map-support": "1.4.0", - "less": "4.1.1", - "less-loader": "10.0.0", - "license-webpack-plugin": "2.3.20", - "loader-utils": "2.0.0", - "mini-css-extract-plugin": "1.6.2", - "minimatch": "3.0.4", - "open": "8.2.1", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "6.0.1", - "postcss": "8.3.5", - "postcss-import": "14.0.2", - "postcss-loader": "6.1.0", - "postcss-preset-env": "6.7.0", - "raw-loader": "4.0.2", - "regenerator-runtime": "0.13.7", - "resolve-url-loader": "4.0.0", - "rxjs": "6.6.7", - "sass": "1.35.1", - "sass-loader": "12.1.0", - "semver": "7.3.5", - "source-map": "0.7.3", - "source-map-loader": "3.0.0", - "source-map-support": "0.5.19", - "style-loader": "2.0.0", - "stylus": "0.54.8", - "stylus-loader": "6.1.0", - "terser": "5.7.0", - "terser-webpack-plugin": "5.1.3", - "text-table": "0.2.0", - "tree-kill": "1.2.2", - "tslib": "2.3.0", - "webpack": "5.44.0", - "webpack-dev-middleware": "5.0.0", - "webpack-dev-server": "3.11.2", - "webpack-merge": "5.8.0", - "webpack-subresource-integrity": "1.5.2" - }, - "dependencies": { - "tslib": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", - "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", - "dev": true - } + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "@angular-devkit/build-optimizer": { - "version": "0.1201.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1201.4.tgz", - "integrity": "sha512-Hq+mDUe4xIyq4939JZaUkptsM89WnZOk8Qel6mS0T/bxMX/qs+nuGD5o+xDKkuayogbiTrLmyZBib0/90eSXEA==", + "body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", "dev": true, "requires": { - "source-map": "0.7.3", - "tslib": "2.3.0", - "typescript": "4.3.4" + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "dependencies": { - "tslib": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", - "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", - "dev": true + "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" + } }, - "typescript": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.4.tgz", - "integrity": "sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew==", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, - "@angular-devkit/build-webpack": { - "version": "0.1201.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1201.4.tgz", - "integrity": "sha512-eMmbyHyWJZMQ1tfwVdja/iAk/eXJFYrF8b27gDV9gGI7MGB3KJ93AhkbPbcvlw4Hhx4+6M11GfeXzbwH0q9pnQ==", + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dev": true, "requires": { - "@angular-devkit/architect": "0.1201.4", - "rxjs": "6.6.7" + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" } }, - "@angular-devkit/core": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.1.4.tgz", - "integrity": "sha512-KOzGD8JbP/7EeUwPiU5x+fo3ZEQ5R4IVW5WoH92PaO3mdpqXC7UL2MWLct8PUe9il9nqJMvrBMldSSvP9PCT2w==", + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "ajv": "8.6.0", - "ajv-formats": "2.1.0", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.7", - "source-map": "0.7.3" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "@angular-devkit/schematics": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-12.1.4.tgz", - "integrity": "sha512-yD3y3pK/K5piOgvALFoCCiPp4H8emNa3yZL+vlpEpewVLpF1MM55LeTxc0PI5s0uqtOGVnvcbA5wYgMm3YsUEA==", + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "@angular-devkit/core": "12.1.4", - "ora": "5.4.1", - "rxjs": "6.6.7" + "fill-range": "^7.0.1" } }, - "@angular/animations": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-12.1.5.tgz", - "integrity": "sha512-t17n8RuzkY7lYawmI01WuNWf70ttvEPknmS3sh7q2IAsBdRiLQCBmh6Hw5q0SBaQNoRWNIcUWKBwl4EmyXOtrA==", + "browserslist": { + "version": "4.20.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", + "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", + "dev": true, "requires": { - "tslib": "^2.2.0" + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", + "escalade": "^3.1.1", + "node-releases": "^2.0.2", + "picocolors": "^1.0.0" } }, - "@angular/cdk": { - "version": "12.2.13", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-12.2.13.tgz", - "integrity": "sha512-zSKRhECyFqhingIeyRInIyTvYErt4gWo+x5DQr0b7YLUbU8DZSwWnG4w76Ke2s4U8T7ry1jpJBHoX/e8YBpGMg==", + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "requires": { - "parse5": "^5.0.0", - "tslib": "^2.2.0" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "@angular/cli": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-12.1.4.tgz", - "integrity": "sha512-LpyhyqWe3bFcuH3MrXeYoIPI1htjwG1b5ehETfq4qsMvNmuFON6QI+F7EWEpX7lItVQc2bES+ogasTZsZue/uw==", - "dev": true, - "requires": { - "@angular-devkit/architect": "0.1201.4", - "@angular-devkit/core": "12.1.4", - "@angular-devkit/schematics": "12.1.4", - "@schematics/angular": "12.1.4", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.1", - "debug": "4.3.1", - "ini": "2.0.0", - "inquirer": "8.1.1", - "jsonc-parser": "3.0.0", - "npm-package-arg": "8.1.5", - "npm-pick-manifest": "6.1.1", - "open": "8.2.1", - "ora": "5.4.1", - "pacote": "11.3.4", - "resolve": "1.20.0", - "semver": "7.3.5", - "symbol-observable": "4.0.0", - "uuid": "8.3.2" - } + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true }, - "@angular/common": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-12.1.5.tgz", - "integrity": "sha512-xs33eMhV79S85nbH5FVmujKY3OoczloW9oOGRe5tCzxsDDv85hadrB8Mbm3qI5WQ99DNk8M2+P0MW6uiyCAWkQ==", - "requires": { - "tslib": "^2.2.0" - } + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true }, - "@angular/compiler": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-12.1.5.tgz", - "integrity": "sha512-MBrNCuTFmBiTy+sqmBYRqfBHPBJeONvRWOxHepn/CMtjHJiTZ+PHG61Chu2ySxLBuOZxAGaP4GMcqIc15G742g==", - "requires": { - "tslib": "^2.2.0" - } + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true }, - "@angular/compiler-cli": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-12.1.5.tgz", - "integrity": "sha512-5YqZ5heKS3G5t3Fg9L26UedNnum8F9yjNDgUq0qvYR2b6nEDOLYgUxuUSRtg6IGDglSgbxpkgkGNd/SHF9Iu8A==", + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", "dev": true, "requires": { - "@babel/core": "^7.8.6", - "@babel/types": "^7.8.6", - "canonical-path": "1.0.0", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", - "dependency-graph": "^0.11.0", - "magic-string": "^0.25.0", - "minimist": "^1.2.0", - "reflect-metadata": "^0.1.2", - "semver": "^7.0.0", - "source-map": "^0.6.1", - "sourcemap-codec": "^1.4.8", - "tslib": "^2.2.0", - "yargs": "^17.0.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" } }, - "@angular/core": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-12.1.5.tgz", - "integrity": "sha512-okXnhAPxfblAWSe5M/IqrSATi+ul83a9o9PWOTFR/XCVcbx+neE2IwIr1dIDKBKj91b1CFalLS+uOSkN05PNkA==", + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, "requires": { - "tslib": "^2.2.0" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" } }, - "@angular/forms": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-12.1.5.tgz", - "integrity": "sha512-ABfBRCZYVbR5MUkMNrYU/ovCjXtCedk0h4phzCimGl6hBcpbumT9z/3m0TsY9sQnLq0BaCfKNklnHwCuO9mSSg==", - "requires": { - "tslib": "^2.2.0" - } + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true }, - "@angular/material": { - "version": "12.2.13", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-12.2.13.tgz", - "integrity": "sha512-6g2GyN4qp2D+DqY2AwrQuPB3cd9gybvQVXvNRbTPXEulHr+LgGei00ySdFHFp6RvdGSMZ4i3LM1Fq3VkFxhCfQ==", - "requires": { - "tslib": "^2.2.0" - } + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true }, - "@angular/platform-browser": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-12.1.5.tgz", - "integrity": "sha512-UNlmvCY8cS1/WojCJtgf/EMMN8qdPV1IQa6vZ6/ChQiS38YlH+aQEOCcxtSSfMFmWjaz7j67u55vSlkvA4rApQ==", - "requires": { - "tslib": "^2.2.0" - } + "can-use-dom": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/can-use-dom/-/can-use-dom-0.1.0.tgz", + "integrity": "sha1-IsxKNKCrxDlQ9CxkEQJKP2NmtFo=" }, - "@angular/platform-browser-dynamic": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.1.5.tgz", - "integrity": "sha512-4Anc2pRGRnBHzSeWMYOaEs6hUYw09N/WsOg1lHevZ8abwXyo80xOKiZa+kfgFkst0XaY8DzuDQFnj7opcEVdCQ==", - "requires": { - "tslib": "^2.2.0" - } + "caniuse-lite": { + "version": "1.0.30001332", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz", + "integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==", + "dev": true }, - "@angular/router": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-12.1.5.tgz", - "integrity": "sha512-ZZFLcaenVFKCyaxD3mU4cuV4RNFwCEN6JLWmkOFkwIt01RVJcvPaPxiv4pfQf5hnk2HeSciMA0J+UIzSu5YKMA==", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "requires": { - "tslib": "^2.2.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "requires": { - "@babel/highlight": "^7.16.7" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" } }, - "@babel/compat-data": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", - "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true }, - "@babel/core": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", - "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helpers": "^7.14.6", - "@babel/parser": "^7.14.6", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.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 - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } + "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 }, - "@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "circular-dependency-plugin": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz", + "integrity": "sha512-g38K9Cm5WRwlaH6g03B9OEz/0qRizI+2I7n+Gz+L5DxXJAPAiWQvwlYNm1V1jkdpUv95bOe/ASm2vfi/G560jQ==", "dev": true, - "requires": { - "@babel/types": "^7.14.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=", - "dev": true - } - } + "requires": {} }, - "@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "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": { - "@babel/types": "^7.14.5" + "restore-cursor": "^3.1.0" } }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", - "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", + "cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true + }, + "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==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.16.7", - "@babel/types": "^7.16.7" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", - "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==", - "dev": true - } + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" } }, - "@babel/helper-create-class-features-plugin": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.7.tgz", - "integrity": "sha512-kIFozAvVfK05DM4EVQYKK+zteWvY85BFdGBRQBytRyY3y+6PX0DkDOn/CZ3lEuczCfrCxEzwt0YtP/87YPTWSw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7" + "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==", + "dev": true, + "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=", + "dev": true + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "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 + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" }, "dependencies": { - "@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "ms": "2.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz", - "integrity": "sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g==", + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^4.7.1" + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" }, "dependencies": { - "@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "ms": "2.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, - "@babel/helper-define-polyfill-provider": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.4.tgz", - "integrity": "sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ==", + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" + "safe-buffer": "5.2.1" }, "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "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==", "dev": true } } }, - "@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "safe-buffer": "~5.1.1" } }, - "@babel/helper-explode-assignable-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", - "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "is-what": "^3.14.1" } }, - "@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "copy-webpack-plugin": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.1.tgz", + "integrity": "sha512-nr81NhCAIpAWXGCK5thrKmfCQ6GDY0L5RN0U+BnIn/7Us55+UCex5ANNsNKmIVtDRnk0Ecf+/kzp9SUVrrBMLg==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" + "fast-glob": "^3.2.7", + "glob-parent": "^6.0.1", + "globby": "^12.0.2", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" }, "dependencies": { - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "is-glob": "^4.0.3" + } + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" } } } }, - "@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } + "core-js": { + "version": "3.20.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.20.3.tgz", + "integrity": "sha512-vVl8j8ph6tRS3B8qir40H7yw7voy17xL0piAjlbBUsH7WIfzoedL/ZOr1OV9FyZQLWXsayOJyV4tnRyXR85/ag==" }, - "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "core-js-compat": { + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz", + "integrity": "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "browserslist": "^4.19.1", + "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 + } } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", - "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "object-assign": "^4", + "vary": "^1" } }, - "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" } }, - "@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "critters": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.16.tgz", + "integrity": "sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "chalk": "^4.1.0", + "css-select": "^4.2.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "postcss": "^8.3.7", + "pretty-bytes": "^5.3.0" }, "dependencies": { - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "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": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "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==", + "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 + }, + "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 + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "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" } } } }, - "@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", - "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", + "css": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.8", - "@babel/types": "^7.16.8" + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" }, "dependencies": { - "@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, - "@babel/helper-replace-supers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", - "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "css-blank-pseudo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "postcss-selector-parser": "^6.0.9" } }, - "@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "css-has-pseudo": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "postcss-selector-parser": "^6.0.9" } }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "css-loader": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.5.1.tgz", + "integrity": "sha512-gEy2w9AnJNnD9Kuo4XAP9VflW/ujKoS9c/syO+uWMlm5igc7LysKzPXaDoR2vroROkSwsTS2tGr1yGGEbZOYZQ==", "dev": true, "requires": { - "@babel/types": "^7.16.0" + "icss-utils": "^5.1.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "semver": "^7.3.5" } }, - "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "css-prefers-color-scheme": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "dev": true, + "requires": {} + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" } }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true }, - "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "cssdb": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-5.1.0.tgz", + "integrity": "sha512-/vqjXhv1x9eGkE/zO6o8ZOI7dgdZbLVLUGyVRbPgk6YipXbW87YzUCcO+Jrmi5bwJlAH6oD+MNeZyRgXea1GZw==", "dev": true }, - "@babel/helper-wrap-function": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", - "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8" - }, - "dependencies": { - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - } - } - } + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true }, - "@babel/helpers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", - "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", - "dev": true, - "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "dependencies": { - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - } - } - } + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true }, - "@babel/highlight": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", - "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", + "date-format": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.6.tgz", + "integrity": "sha512-B9vvg5rHuQ8cbUXE/RMWMyX2YA5TecT3jKF5fLtGNlzPlU7zblSPmAm2OImDbWL+LDOQ6pUm+4LOFz+ywS41Zw==", + "dev": true + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "ms": "2.1.2" } }, - "@babel/parser": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz", - "integrity": "sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==", + "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=", "dev": true }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", - "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.7" + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" } }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz", - "integrity": "sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q==", + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "execa": "^5.0.0" } }, - "@babel/plugin-proposal-class-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", - "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "clone": "^1.0.2" } }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz", - "integrity": "sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", - "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", + "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": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" + "object-keys": "^1.0.12" } }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", - "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", + "del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "dependencies": { + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + } } }, - "@babel/plugin-proposal-json-strings": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", - "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", - "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "path-type": "^4.0.0" } }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", - "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" } }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", - "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "buffer-indexof": "^1.0.0" } }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz", - "integrity": "sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA==", + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", "dev": true, "requires": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.7" + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" } }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", - "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" } }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", - "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "domelementtype": "^2.2.0" } }, - "@babel/plugin-proposal-private-methods": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.7.tgz", - "integrity": "sha512-7twV3pzhrRxSwHeIvFE6coPgvo+exNDOiGUMg39o2LiLo1Y+4aKpfkcLGcg1UHonzorCt7SNXnoMyCnnIOA8Sw==", + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" } }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", - "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.107", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.107.tgz", + "integrity": "sha512-Huen6taaVrUrSy8o7mGStByba8PfOWWluHNxSHGBrCgEdFVLtvdQDBr9LBCF9Uci8SYxh28QNNMO0oC17wbGAg==", + "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 + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, + "optional": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + "iconv-lite": "^0.6.2" }, "dependencies": { - "@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "optional": true, "requires": { - "@babel/types": "^7.16.7" + "safer-buffer": ">= 2.1.2 < 3.0.0" } } } }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", - "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", + "engine.io": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.3.tgz", + "integrity": "sha512-rqs60YwkvWTLLnfazqgZqLa/aKo+9cueVfEi/dZ8PyGyaf8TLOxj++4QMIgeG3Gn0AhrWiFXvghsoY9L9h25GA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3" } }, - "@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==", + "engine.io-parser": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", + "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@socket.io/base64-arraybuffer": "~1.0.2" } }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "enhanced-resolve": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", + "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" } }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, + "optional": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "prr": "~1.0.1" } }, - "@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==", + "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==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "is-arrayish": "^0.2.1" } }, - "@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==", + "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 + }, + "esbuild": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.22.tgz", + "integrity": "sha512-CjFCFGgYtbFOPrwZNJf7wsuzesx8kqwAffOlbYcFDLFuUtP8xloK1GH+Ai13Qr0RZQf9tE7LMTHJ2iVGJ1SKZA==", "dev": true, + "optional": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } + "esbuild-android-arm64": "0.14.22", + "esbuild-darwin-64": "0.14.22", + "esbuild-darwin-arm64": "0.14.22", + "esbuild-freebsd-64": "0.14.22", + "esbuild-freebsd-arm64": "0.14.22", + "esbuild-linux-32": "0.14.22", + "esbuild-linux-64": "0.14.22", + "esbuild-linux-arm": "0.14.22", + "esbuild-linux-arm64": "0.14.22", + "esbuild-linux-mips64le": "0.14.22", + "esbuild-linux-ppc64le": "0.14.22", + "esbuild-linux-riscv64": "0.14.22", + "esbuild-linux-s390x": "0.14.22", + "esbuild-netbsd-64": "0.14.22", + "esbuild-openbsd-64": "0.14.22", + "esbuild-sunos-64": "0.14.22", + "esbuild-windows-32": "0.14.22", + "esbuild-windows-64": "0.14.22", + "esbuild-windows-arm64": "0.14.22" + } + }, + "esbuild-android-arm64": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.22.tgz", + "integrity": "sha512-k1Uu4uC4UOFgrnTj2zuj75EswFSEBK+H6lT70/DdS4mTAOfs2ECv2I9ZYvr3w0WL0T4YItzJdK7fPNxcPw6YmQ==", + "dev": true, + "optional": true }, - "@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==", + "esbuild-darwin-64": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.22.tgz", + "integrity": "sha512-d8Ceuo6Vw6HM3fW218FB6jTY6O3r2WNcTAU0SGsBkXZ3k8SDoRLd3Nrc//EqzdgYnzDNMNtrWegK2Qsss4THhw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } + "optional": true }, - "@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==", + "esbuild-darwin-arm64": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.22.tgz", + "integrity": "sha512-YAt9Tj3SkIUkswuzHxkaNlT9+sg0xvzDvE75LlBo4DI++ogSgSmKNR6B4eUhU5EUUepVXcXdRIdqMq9ppeRqfw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } + "optional": true }, - "@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==", + "esbuild-freebsd-64": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.22.tgz", + "integrity": "sha512-ek1HUv7fkXMy87Qm2G4IRohN+Qux4IcnrDBPZGXNN33KAL0pEJJzdTv0hB/42+DCYWylSrSKxk3KUXfqXOoH4A==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } + "optional": true }, - "@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==", + "esbuild-freebsd-arm64": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.22.tgz", + "integrity": "sha512-zPh9SzjRvr9FwsouNYTqgqFlsMIW07O8mNXulGeQx6O5ApgGUBZBgtzSlBQXkHi18WjrosYfsvp5nzOKiWzkjQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } + "optional": true }, - "@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==", + "esbuild-linux-32": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.22.tgz", + "integrity": "sha512-SnpveoE4nzjb9t2hqCIzzTWBM0RzcCINDMBB67H6OXIuDa4KqFqaIgmTchNA9pJKOVLVIKd5FYxNiJStli21qg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } + "optional": true }, - "@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==", + "esbuild-linux-64": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.22.tgz", + "integrity": "sha512-Zcl9Wg7gKhOWWNqAjygyqzB+fJa19glgl2JG7GtuxHyL1uEnWlpSMytTLMqtfbmRykIHdab797IOZeKwk5g0zg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } + "optional": true }, - "@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==", + "esbuild-linux-arm": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.22.tgz", + "integrity": "sha512-soPDdbpt/C0XvOOK45p4EFt8HbH5g+0uHs5nUKjHVExfgR7du734kEkXR/mE5zmjrlymk5AA79I0VIvj90WZ4g==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } + "optional": true }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "esbuild-linux-arm64": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.22.tgz", + "integrity": "sha512-8q/FRBJtV5IHnQChO3LHh/Jf7KLrxJ/RCTGdBvlVZhBde+dk3/qS9fFsUy+rs3dEi49aAsyVitTwlKw1SUFm+A==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } + "optional": true }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "esbuild-linux-mips64le": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.22.tgz", + "integrity": "sha512-SiNDfuRXhGh1JQLLA9JPprBgPVFOsGuQ0yDfSPTNxztmVJd8W2mX++c4FfLpAwxuJe183mLuKf7qKCHQs5ZnBQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } + "optional": true }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", - "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", + "esbuild-linux-ppc64le": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.22.tgz", + "integrity": "sha512-6t/GI9I+3o1EFm2AyN9+TsjdgWCpg2nwniEhjm2qJWtJyJ5VzTXGUU3alCO3evopu8G0hN2Bu1Jhz2YmZD0kng==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } + "optional": true }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", - "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", + "esbuild-linux-riscv64": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.22.tgz", + "integrity": "sha512-AyJHipZKe88sc+tp5layovquw5cvz45QXw5SaDgAq2M911wLHiCvDtf/07oDx8eweCyzYzG5Y39Ih568amMTCQ==", "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5" - } + "optional": true }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", - "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", + "esbuild-linux-s390x": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.22.tgz", + "integrity": "sha512-Sz1NjZewTIXSblQDZWEFZYjOK6p8tV6hrshYdXZ0NHTjWE+lwxpOpWeElUGtEmiPcMT71FiuA9ODplqzzSxkzw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } + "optional": true }, - "@babel/plugin-transform-block-scoping": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", - "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", + "esbuild-netbsd-64": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.22.tgz", + "integrity": "sha512-TBbCtx+k32xydImsHxvFgsOCuFqCTGIxhzRNbgSL1Z2CKhzxwT92kQMhxort9N/fZM2CkRCPPs5wzQSamtzEHA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } + "optional": true }, - "@babel/plugin-transform-classes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", - "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", + "esbuild-openbsd-64": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.22.tgz", + "integrity": "sha512-vK912As725haT313ANZZZN+0EysEEQXWC/+YE4rQvOQzLuxAQc2tjbzlAFREx3C8+uMuZj/q7E5gyVB7TzpcTA==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "globals": "^11.1.0" - }, - "dependencies": { - "@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - } - } + "optional": true }, - "@babel/plugin-transform-computed-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", - "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", + "esbuild-sunos-64": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.22.tgz", + "integrity": "sha512-/mbJdXTW7MTcsPhtfDsDyPEOju9EOABvCjeUU2OJ7fWpX/Em/H3WYDa86tzLUbcVg++BScQDzqV/7RYw5XNY0g==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } + "optional": true }, - "@babel/plugin-transform-destructuring": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz", - "integrity": "sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A==", + "esbuild-wasm": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.22.tgz", + "integrity": "sha512-FOSAM29GN1fWusw0oLMv6JYhoheDIh5+atC72TkJKfIUMID6yISlicoQSd9gsNSFsNBvABvtE2jR4JB1j4FkFw==", + "dev": true + }, + "esbuild-windows-32": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.22.tgz", + "integrity": "sha512-1vRIkuvPTjeSVK3diVrnMLSbkuE36jxA+8zGLUOrT4bb7E/JZvDRhvtbWXWaveUc/7LbhaNFhHNvfPuSw2QOQg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } + "optional": true }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", - "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", + "esbuild-windows-64": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.22.tgz", + "integrity": "sha512-AxjIDcOmx17vr31C5hp20HIwz1MymtMjKqX4qL6whPj0dT9lwxPexmLj6G1CpR3vFhui6m75EnBEe4QL82SYqw==", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } + "optional": true }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", - "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", + "esbuild-windows-arm64": { + "version": "0.14.22", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.22.tgz", + "integrity": "sha512-5wvQ+39tHmRhNpu2Fx04l7QfeK3mQ9tKzDqqGR8n/4WUxsFxnVLfDRBGirIfk4AfWlxk60kqirlODPoT5LqMUg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } + "optional": true }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", - "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "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=", + "dev": true + }, + "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": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" } }, - "@babel/plugin-transform-for-of": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", - "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "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": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", - "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } } }, - "@babel/plugin-transform-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", - "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", - "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true }, - "@babel/plugin-transform-modules-amd": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", - "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" + "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" } }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", - "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", + "express": { + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", + "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.19.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.4.2", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.9.7", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.9.7", + "raw-body": "2.4.3", + "type-is": "~1.6.18" + } + }, + "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" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", + "dev": true + }, + "raw-body": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", + "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "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==", + "dev": true + } } }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", - "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "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": { - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" } }, - "@babel/plugin-transform-modules-umd": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", - "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", + "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-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" } }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", - "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", + "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==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7" + "reusify": "^1.0.4" } }, - "@babel/plugin-transform-new-target": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", - "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "websocket-driver": ">=0.5.1" } }, - "@babel/plugin-transform-object-super": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", - "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7" + "escape-string-regexp": "^1.0.5" } }, - "@babel/plugin-transform-parameters": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", - "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", + "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==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "to-regex-range": "^5.0.1" } }, - "@babel/plugin-transform-property-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", - "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + } } }, - "@babel/plugin-transform-regenerator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", - "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, "requires": { - "regenerator-transform": "^0.14.2" + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" } }, - "@babel/plugin-transform-reserved-words": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", - "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, - "@babel/plugin-transform-runtime": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz", - "integrity": "sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "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==", - "dev": true - } - } + "flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", - "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", + "follow-redirects": { + "version": "1.14.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", + "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==", + "dev": true + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs-extra": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, - "@babel/plugin-transform-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", - "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + "minipass": "^3.0.0" } }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", - "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", + "fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } + "optional": true }, - "@babel/plugin-transform-template-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", - "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" } }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", - "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", + "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==", + "dev": true + }, + "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==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" } }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", - "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", + "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==", + "dev": 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==", + "dev": true + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "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" } }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", - "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", + "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": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "is-glob": "^4.0.1" } }, - "@babel/preset-env": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.7.tgz", - "integrity": "sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.14.7", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-async-generator-functions": "^7.14.7", - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-proposal-class-static-block": "^7.14.5", - "@babel/plugin-proposal-dynamic-import": "^7.14.5", - "@babel/plugin-proposal-export-namespace-from": "^7.14.5", - "@babel/plugin-proposal-json-strings": "^7.14.5", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", - "@babel/plugin-proposal-numeric-separator": "^7.14.5", - "@babel/plugin-proposal-object-rest-spread": "^7.14.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-private-methods": "^7.14.5", - "@babel/plugin-proposal-private-property-in-object": "^7.14.5", - "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@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-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.14.5", - "@babel/plugin-transform-async-to-generator": "^7.14.5", - "@babel/plugin-transform-block-scoped-functions": "^7.14.5", - "@babel/plugin-transform-block-scoping": "^7.14.5", - "@babel/plugin-transform-classes": "^7.14.5", - "@babel/plugin-transform-computed-properties": "^7.14.5", - "@babel/plugin-transform-destructuring": "^7.14.7", - "@babel/plugin-transform-dotall-regex": "^7.14.5", - "@babel/plugin-transform-duplicate-keys": "^7.14.5", - "@babel/plugin-transform-exponentiation-operator": "^7.14.5", - "@babel/plugin-transform-for-of": "^7.14.5", - "@babel/plugin-transform-function-name": "^7.14.5", - "@babel/plugin-transform-literals": "^7.14.5", - "@babel/plugin-transform-member-expression-literals": "^7.14.5", - "@babel/plugin-transform-modules-amd": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.14.5", - "@babel/plugin-transform-modules-systemjs": "^7.14.5", - "@babel/plugin-transform-modules-umd": "^7.14.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.7", - "@babel/plugin-transform-new-target": "^7.14.5", - "@babel/plugin-transform-object-super": "^7.14.5", - "@babel/plugin-transform-parameters": "^7.14.5", - "@babel/plugin-transform-property-literals": "^7.14.5", - "@babel/plugin-transform-regenerator": "^7.14.5", - "@babel/plugin-transform-reserved-words": "^7.14.5", - "@babel/plugin-transform-shorthand-properties": "^7.14.5", - "@babel/plugin-transform-spread": "^7.14.6", - "@babel/plugin-transform-sticky-regex": "^7.14.5", - "@babel/plugin-transform-template-literals": "^7.14.5", - "@babel/plugin-transform-typeof-symbol": "^7.14.5", - "@babel/plugin-transform-unicode-escapes": "^7.14.5", - "@babel/plugin-transform-unicode-regex": "^7.14.5", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "core-js-compat": "^3.15.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==", - "dev": true - } - } + "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 }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz", + "integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==", "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" + "array-union": "^3.0.1", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.7", + "ignore": "^5.1.9", + "merge2": "^1.4.1", + "slash": "^4.0.0" } }, - "@babel/runtime": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", - "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "regenerator-runtime": "^0.13.4" + "function-bind": "^1.1.1" } }, - "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" + "has-symbols": "^1.0.2" } }, - "@babel/traverse": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.8.tgz", - "integrity": "sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ==", + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "hdr-histogram-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", "dev": true, "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.8", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.8", - "@babel/types": "^7.16.8", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", + "dev": true + }, + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" }, "dependencies": { - "@babel/generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", - "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", + "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==", "dev": true, "requires": { - "@babel/types": "^7.16.8", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "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" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } } } }, - "@babel/types": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", - "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } + "html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", + "dev": true }, - "@csstools/convert-colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", - "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==", + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "@discoveryjs/json-ext": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", - "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==", + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, - "@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==", + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", "dev": true }, - "@jsdevtools/coverage-istanbul-loader": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz", - "integrity": "sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA==", + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "requires": { - "convert-source-map": "^1.7.0", - "istanbul-lib-instrument": "^4.0.3", - "loader-utils": "^2.0.0", - "merge-source-map": "^1.1.0", - "schema-utils": "^2.7.0" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "dependencies": { + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } } }, - "@juggle/resize-observer": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.3.1.tgz", - "integrity": "sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw==" + "http-parser-js": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.6.tgz", + "integrity": "sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==", + "dev": true }, - "@ngtools/webpack": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-12.1.4.tgz", - "integrity": "sha512-hXc8dTnRfDB7o1Pd7a07aw0rjGmVLXU28+cTHQJliosgD3obcjfZ4QPA0k97vlQMtqVJawuShRfyiUKrpsJf8Q==", + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "requires": { - "enhanced-resolve": "5.8.2" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" } }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "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==", "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" } }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "http-proxy-middleware": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.4.tgz", + "integrity": "sha512-m/4FxX17SUvz4lJ5WPXOHDUuCwIqXLfLHs1s0uZ3oYjhoXlx9csYxaOa0ElDEJ+h8Q4iJ1s+lTMbiCa4EXIJqg==", "dev": true, "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" } }, - "@npmcli/git": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", - "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "dev": true, "requires": { - "@npmcli/promise-spawn": "^1.3.2", - "lru-cache": "^6.0.0", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^6.1.1", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - }, - "dependencies": { - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } + "agent-base": "6", + "debug": "4" } }, - "@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "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==", + "dev": true + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", "dev": true, "requires": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" + "ms": "^2.0.0" } }, - "@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" + "safer-buffer": ">= 2.1.2 < 3" } }, - "@npmcli/node-gyp": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", - "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "requires": {} + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true }, - "@npmcli/promise-spawn": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", - "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "ignore-walk": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz", + "integrity": "sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==", "dev": true, "requires": { - "infer-owner": "^1.0.4" + "minimatch": "^3.0.4" } }, - "@npmcli/run-script": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.6.tgz", - "integrity": "sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g==", - "dev": true, - "requires": { - "@npmcli/node-gyp": "^1.0.2", - "@npmcli/promise-spawn": "^1.3.2", - "node-gyp": "^7.1.0", - "read-package-json-fast": "^2.0.1" - } + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true }, - "@schematics/angular": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-12.1.4.tgz", - "integrity": "sha512-xGqgGI6GWk4EFdKis8FmSESxoLgjnLQbaRE1t1KZCkSKJzqkOj0R9wiDrtZfcrbPxIkLL+3fAk2ThwwPznT6yw==", + "immutable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", + "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { - "@angular-devkit/core": "12.1.4", - "@angular-devkit/schematics": "12.1.4", - "jsonc-parser": "3.0.0" + "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 + } } }, - "@socket.io/base64-arraybuffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", - "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==", + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true }, - "@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", "dev": true }, - "@types/component-emitter": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", - "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==", - "dev": true + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } }, - "@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true }, - "@types/eslint": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.2.tgz", - "integrity": "sha512-nQxgB8/Sg+QKhnV8e0WzPpxjIGT3tuJDDzybkDi8ItE/IgTlHo07U0shaIjzhcvQxlq9SDRE42lsJ23uvEgJ2A==", + "inquirer": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz", + "integrity": "sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ==", "dev": true, "requires": { - "@types/estree": "*", - "@types/json-schema": "*" + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.2.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "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.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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 + }, + "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" + } + } } }, - "@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "dev": true + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, "requires": { - "@types/eslint": "*", - "@types/estree": "*" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, - "@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { - "@types/minimatch": "*", - "@types/node": "*" + "binary-extensions": "^2.0.0" } }, - "@types/jasmine": { - "version": "3.6.11", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.6.11.tgz", - "integrity": "sha512-S6pvzQDvMZHrkBz2Mcn/8Du7cpr76PlRJBAoHnSDNbulULsH5dp0Gns+WRyNX5LHejz/ljxK4/vIHK/caHt6SQ==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true + "is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "requires": { + "has": "^1.0.3" + } }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } }, - "@types/node": { - "version": "12.20.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.42.tgz", - "integrity": "sha512-aI3/oo5DzyiI5R/xAhxxRzfZlWlsbbqdgxfTPkqu/Zt+23GXiJvMCyPJT4+xKSXOnLqoL8jJYMLTwvK2M3a5hw==", + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "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 }, - "@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "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 }, - "@types/webpack-sources": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.9.tgz", - "integrity": "sha512-bvzMnzqoK16PQIC8AYHNdW45eREJQMd6WG/msQWX5V2+vZmODCOPb4TJcbgRljTZZTwTM4wUMcsI8FftNA7new==", + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "is-extglob": "^2.1.1" } }, - "@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, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true }, - "@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==", + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", "dev": 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==", + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": 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==", + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "dev": 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, - "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==", + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": 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, - "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" - } + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "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==", "dev": true, "requires": { - "@xtuc/ieee754": "^1.2.0" + "isobject": "^3.0.1" } }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { - "@xtuc/long": "4.2.2" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": 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, - "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, - "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, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true }, - "@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, - "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" - } + "is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true }, - "@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==", + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" + "is-docker": "^2.0.0" } }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": 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==", + "isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", "dev": true }, - "@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "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==", "dev": true }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "istanbul-lib-instrument": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", + "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", "dev": true, "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "@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==", + "dev": true + } } }, - "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true - }, - "adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "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==", "dev": true, "requires": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" + "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==", + "dev": true + }, + "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" + } + } } }, - "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==", + "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==", "dev": true, "requires": { - "debug": "4" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "agentkeepalive": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.0.tgz", - "integrity": "sha512-0PhAp58jZNw13UJv7NVdTGb0ZcghHUb3DrZ046JiiJY/BOaTTpbwdHq2VObPCBV8M2GPh7sgrJ3AQ8Ey468LJw==", + "istanbul-reports": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", "dev": true, "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.0.tgz", - "integrity": "sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true, - "requires": {} - }, - "ajv-formats": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.0.tgz", - "integrity": "sha512-USH2jBb+C/hIpwD2iRjp0pe0k+MvzG0mlSn/FIdCgQhUb9ALPRjt2KIQdfZDS9r0ZIeUAg7gOu9KL0PFqGqr5Q==", - "dev": true, - "requires": { - "ajv": "^8.0.0" - } - }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "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==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "jasmine-core": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.1.0.tgz", + "integrity": "sha512-8E8BiffCL8sBwK1zU9cbavLe8xpJAgOduSJ6N8PJVv8VosQ/nxVTuXj2kUeHxTlZBVvh24G19ga7xdiaxlceKg==", "dev": true }, - "are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "jest-worker": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.2.tgz", + "integrity": "sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==", "dev": true, "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "dependencies": { - "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==", - "dev": true, - "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" - } + "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 }, - "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==", + "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, "requires": { - "safe-buffer": "~5.1.0" + "has-flag": "^4.0.0" } } } }, - "arr-diff": { + "js-tokens": { "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==", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "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=", - "dev": true + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "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 }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "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==", "dev": true }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "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=", + "jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", "dev": true }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { - "lodash": "^4.17.14" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "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==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, - "autoprefixer": { - "version": "9.8.8", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", - "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "karma": { + "version": "6.3.18", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.18.tgz", + "integrity": "sha512-YEwXVHRILKWKN7uEW9IkgTPjnYGb3YA3MDvlp04xpSRAyrNPoRmsBayLDgHykKAwBm6/mAOckj4xi/1JdQfhzQ==", "dev": true, "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "picocolors": "^0.2.1", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.4.1", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" }, "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "minimist": "^1.2.6" } }, "source-map": { @@ -18335,955 +17013,1054 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - } - } - }, - "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=", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, - "babel-loader": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", - "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", - "dev": true, - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "requires": { - "minimist": "^1.2.0" + "rimraf": "^3.0.0" } }, - "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==", + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "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" } + }, + "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==", + "dev": true } } }, - "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==", + "karma-chrome-launcher": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz", + "integrity": "sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ==", "dev": true, "requires": { - "object.assign": "^4.1.0" + "which": "^1.2.1" } }, - "babel-plugin-polyfill-corejs2": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.3.tgz", - "integrity": "sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA==", + "karma-coverage": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.0.tgz", + "integrity": "sha512-gPVdoZBNDZ08UCzdMHHhEImKrw1+PAOQOIiffv1YsvxFhBjqvo/SVXNk4tqn1SYqX0BJZT6S/59zgxiBe+9OuA==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.4", - "semver": "^6.1.1" - }, - "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-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" } }, - "babel-plugin-polyfill-corejs3": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz", - "integrity": "sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==", + "karma-jasmine": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.0.0.tgz", + "integrity": "sha512-dsFkCoTwyoNyQnMgegS72wIA/2xPDJG5yzTry0448U6lAY7P60Wgg4UuLlbdLv8YHbimgNpDXjjmfPdc99EDWQ==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.16.2" + "jasmine-core": "^4.1.0" } }, - "babel-plugin-polyfill-regenerator": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.3.tgz", - "integrity": "sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g==", + "karma-jasmine-html-reporter": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.7.0.tgz", + "integrity": "sha512-pzum1TL7j90DTE86eFt48/s12hqwQuiD+e5aXx2Dc9wDEn2LfGq6RoAxEZZjFiN0RDSCOnosEKRZWxbQ+iMpQQ==", + "dev": true, + "requires": {} + }, + "karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.4" + "source-map-support": "^0.5.5" } }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "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 + }, + "klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", "dev": true }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "less": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.2.tgz", + "integrity": "sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA==", "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" + "copy-anything": "^2.0.1", + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^2.5.2", + "parse-node-version": "^1.0.1", + "source-map": "~0.6.0", + "tslib": "^2.3.0" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "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, + "optional": true, "requires": { - "is-descriptor": "^1.0.0" + "pify": "^4.0.1", + "semver": "^5.6.0" } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "optional": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "optional": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true } } }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "less-loader": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-10.2.0.tgz", + "integrity": "sha512-AV5KHWvCezW27GT90WATaDnfXBv99llDbtaj4bshq6DvAihMdNjaPDcUMa6EXKLRF+P2opFenJp89BXg91XLYg==", + "dev": true, + "requires": { + "klona": "^2.0.4" + } + }, + "license-webpack-plugin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "dev": true, + "requires": { + "webpack-sources": "^3.0.0" + } + }, + "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==", "dev": true }, - "base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "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 }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "loader-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", + "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "tweetnacl": "^0.14.3" + "p-locate": "^4.1.0" } }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" }, - "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" - } + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } + "lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" }, - "body-parser": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", - "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "requires": { - "bytes": "3.1.1", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.6", - "raw-body": "2.4.2", - "type-is": "~1.6.18" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "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": { - "ms": "2.0.0" + "color-convert": "^2.0.1" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 - } - } - }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" + }, + "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 + }, + "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" + } + } } }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "log4js": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.4.tgz", + "integrity": "sha512-ncaWPsuw9Vl1CKA406hVnJLGQKy1OHx6buk8J4rE2lVW+NW5Y82G5/DIloO7NkqLOUtNPEANaWC1kZYVjXssPw==", "dev": true, "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "date-format": "^4.0.6", + "debug": "^4.3.4", + "flatted": "^3.2.5", + "rfdc": "^1.3.0", + "streamroller": "^3.0.6" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + } } }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "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==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "yallist": "^4.0.0" } }, - "browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" + "sourcemap-codec": "^1.4.4" } }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "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==", "dev": true, "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "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 + } } }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", - "dev": true - }, - "bytes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", - "dev": true - }, - "cacache": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.2.0.tgz", - "integrity": "sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw==", + "make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", "dev": true, "requires": { - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", "lru-cache": "^6.0.0", - "minipass": "^3.1.1", + "minipass": "^3.1.3", "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" } }, - "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" - } + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "memfs": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", + "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "fs-monkey": "1.0.3" } }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", "dev": true }, - "can-use-dom": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/can-use-dom/-/can-use-dom-0.1.0.tgz", - "integrity": "sha1-IsxKNKCrxDlQ9CxkEQJKP2NmtFo=" - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001300", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001300.tgz", - "integrity": "sha512-cVjiJHWGcNlJi8TZVKNMnvMid3Z3TTdDHmLDzlOdIiZq138Exvo0G+G0wTdVYolxKb4AYwC+38pxodiInVtJSA==", + "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==", "dev": true }, - "canonical-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz", - "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", "dev": true }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "mime-db": "1.52.0" } }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "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==", + "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 }, - "circular-dependency-plugin": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz", - "integrity": "sha512-g38K9Cm5WRwlaH6g03B9OEz/0qRizI+2I7n+Gz+L5DxXJAPAiWQvwlYNm1V1jkdpUv95bOe/ASm2vfi/G560jQ==", - "dev": true, - "requires": {} - }, - "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==", + "mini-css-extract-plugin": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.5.3.tgz", + "integrity": "sha512-YseMB8cs8U/KCaAGQoqYmfUuhhGW0a9p9XvWXrxVOkE3/IiISTLw4ALNt7JR5B2eYauFM+PQGSbXMDmVbR7Tfw==", "dev": true, "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" + "schema-utils": "^4.0.0" }, "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=", + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.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-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-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" - } - }, - "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 } } }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, "requires": { - "restore-cursor": "^3.1.0" + "brace-expansion": "^1.1.7" } }, - "cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true - }, - "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==", + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "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==", + "minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", "dev": true, "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "yallist": "^4.0.0" } }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", "dev": true, "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", "dev": true, "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "jsonparse": "^1.3.1", + "minipass": "^3.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==", + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, "requires": { - "color-name": "1.1.3" + "minipass": "^3.0.0" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } }, - "colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", - "dev": true + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } }, - "colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "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 }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dev": true, "requires": { - "delayed-stream": "~1.0.0" + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" } }, - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", "dev": true }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "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==", + "nanoid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.2.tgz", + "integrity": "sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==", "dev": true }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "needle": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", + "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", "dev": true, + "optional": true, "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" }, "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "optional": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "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=", + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true }, - "connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "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 + }, + "nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", "dev": true, + "optional": true, "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "dependencies": { - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" } }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true + "node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "optional": true }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", "dev": true, "requires": { - "safe-buffer": "5.2.1" + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" }, "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==", - "dev": true + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } } } }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "node-gyp-build": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", + "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", + "dev": true, + "optional": true + }, + "node-releases": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.3.tgz", + "integrity": "sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==", "dev": true }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dev": true, "requires": { - "safe-buffer": "~5.1.1" + "abbrev": "1" } }, - "cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", "dev": true }, - "copy-anything": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.3.tgz", - "integrity": "sha512-GK6QUtisv4fNS+XcI7shX0Gx9ORg7QqIznyfho79JTnX1XhLiyZHfftvGiziqzRiEi/Bjhgpi+D2o7HxJFPnDQ==", + "npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-install-checks": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", + "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", "dev": true, "requires": { - "is-what": "^3.12.0" + "semver": "^7.1.1" } }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", "dev": true }, - "copy-webpack-plugin": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.0.tgz", - "integrity": "sha512-k8UB2jLIb1Jip2nZbCz83T/XfhfjX6mB1yLJNYKrpYi7FQimfOoFv/0//iT6HV1K8FwUB5yUbCcnpLebJXJTug==", + "npm-package-arg": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", "dev": true, "requires": { - "fast-glob": "^3.2.5", - "glob-parent": "^6.0.0", - "globby": "^11.0.3", - "normalize-path": "^3.0.0", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1" + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz", + "integrity": "sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==", + "dev": true, + "requires": { + "glob": "^7.1.6", + "ignore-walk": "^4.0.1", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", + "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", + "dev": true, + "requires": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + } + }, + "npm-registry-fetch": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-12.0.2.tgz", + "integrity": "sha512-Df5QT3RaJnXYuOwtXBXS9BWs+tHH2olvkCLh6jcR/b/u3DvPMlp3J0TvvYwplPKxHMOwfg287PYih9QqaVFoKA==", + "dev": true, + "requires": { + "make-fetch-happen": "^10.0.1", + "minipass": "^3.1.6", + "minipass-fetch": "^1.4.1", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^8.1.5" }, "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "@npmcli/fs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz", + "integrity": "sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ==", "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" + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" } }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "@npmcli/move-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", + "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", "dev": true, - "requires": {} + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, + "cacache": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.0.4.tgz", + "integrity": "sha512-U0D4wF3/W8ZgK4qDA5fTtOVSr0gaDfd5aa7tUdAV0uukVWKsAIn6SzXQCoVlg7RWZiJa+bcsM3/pXLumGaL2Ug==", "dev": true, "requires": { - "is-glob": "^4.0.3" + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^7.2.0", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^1.1.1" } }, - "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==", + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "lru-cache": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", + "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", "dev": true }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "make-fetch-happen": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.2.tgz", + "integrity": "sha512-GWMGiZsKVeJACQGJ1P3Z+iNec7pLsU6YW1q11eaPn3RR8nRXHppFWfP7Eu0//55JK3hSjrAQRl8sDa5uXpq1Ew==", "dev": true, "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "agentkeepalive": "^4.2.1", + "cacache": "^16.0.2", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.1.1", + "ssri": "^9.0.0" + }, + "dependencies": { + "minipass-fetch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", + "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + } + } + }, + "ssri": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.0.tgz", + "integrity": "sha512-Y1Z6J8UYnexKFN1R/hxUaYoY2LVdKEzziPmVAFKiKX8fiwvCJTVzn/xYE9TEWod5OVyNfIHHuVfIEuBClL/uJQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" } } } }, - "core-js": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.15.1.tgz", - "integrity": "sha512-h8VbZYnc9pDzueiS2610IULDkpFFPunHwIpl8yRwFahAEEdSpHlTy3h3z3rKq5h11CaUdBEeRViu9AYvbxiMeg==" - }, - "core-js-compat": { - "version": "3.20.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.3.tgz", - "integrity": "sha512-c8M5h0IkNZ+I92QhIpuSijOxGAcj3lgpsWdkCqmUTZNwidujF4r3pi6x1DCN+Vcs5qTS2XWWMfWSuCqyupX8gw==", + "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==", "dev": true, "requires": { - "browserslist": "^4.19.1", - "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 - } + "path-key": "^3.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=", - "dev": true + "npmlog": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.1.tgz", + "integrity": "sha512-BTHDvY6nrRHuRfyjt1MAufLxYdVXZfd099H4+i1f0lPywNQyI4foeNXJRObB/uy+TYqUW0vAD9gbdSOXPst7Eg==", + "dev": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.0", + "set-blocking": "^2.0.0" + } }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", "dev": true, "requires": { - "object-assign": "^4", - "vary": "^1" + "boolbase": "^1.0.0" } }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "dev": true + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, - "critters": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.10.tgz", - "integrity": "sha512-p5VKhP1803+f+0Jq5P03w1SbiHtpAKm+1EpJHkiPxQPq0Vu9QLZHviJ02GRrWi0dlcJqrmzMWInbwp4d22RsGw==", + "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 + }, + "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, "requires": { - "chalk": "^4.1.0", - "css": "^3.0.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "pretty-bytes": "^5.3.0" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "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" + } + }, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" }, "dependencies": { "ansi-styles": { @@ -19326,12 +18103,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -19343,1326 +18114,1219 @@ } } }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "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 + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "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" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "yocto-queue": "^0.1.0" } }, - "css": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", - "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "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==", "dev": true, "requires": { - "inherits": "^2.0.4", - "source-map": "^0.6.1", - "source-map-resolve": "^0.6.0" + "p-limit": "^2.2.0" }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } } } }, - "css-blank-pseudo": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", - "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-retry": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", + "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", "dev": true, "requires": { - "postcss": "^7.0.5" + "@types/retry": "^0.12.0", + "retry": "^0.13.1" }, "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true } } }, - "css-declaration-sorter": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.4.tgz", - "integrity": "sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw==", + "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==", + "dev": true + }, + "pacote": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-12.0.3.tgz", + "integrity": "sha512-CdYEl03JDrRO3x18uHjBYA9TyoW8gy+ThVcypcDkxPtKlw76e4ejhYB6i9lJ+/cebbjpqPW/CijjqxwDTts8Ow==", + "dev": true, + "requires": { + "@npmcli/git": "^2.1.0", + "@npmcli/installed-package-contents": "^1.0.6", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^2.0.0", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^3.0.0", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^12.0.0", + "promise-retry": "^2.0.1", + "read-package-json-fast": "^2.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.1.0" + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "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, + "requires": { + "callsites": "^3.0.0" + } + }, + "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==", "dev": true, "requires": { - "timsort": "^0.3.0" + "@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" } }, - "css-has-pseudo": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", - "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "optional": true + }, + "parse5-html-rewriting-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", + "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", "dev": true, "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^5.0.0-rc.4" + "parse5": "^6.0.1", + "parse5-sax-parser": "^6.0.1" }, "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true - }, - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true } } }, - "css-loader": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.6.tgz", - "integrity": "sha512-0wyN5vXMQZu6BvjbrPdUJvkCzGEO24HC7IS7nW4llc6BBFC+zwR9CKtYGv63Puzsg10L/o12inMY5/2ByzfD6w==", + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "dev": true, "requires": { - "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.15", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.5" + "parse5": "^6.0.1" }, "dependencies": { - "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": {} - }, - "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==", + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true - }, - "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, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } } } }, - "css-minimizer-webpack-plugin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.0.1.tgz", - "integrity": "sha512-RGFIv6iZWUPO2T1vE5+5pNCSs2H2xtHYRdfZPiiNH8Of6QOn9BeFnZSoHiQMkmsxOO/JkPe4BpKfs7slFIWcTA==", + "parse5-sax-parser": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", + "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", "dev": true, "requires": { - "cssnano": "^5.0.0", - "jest-worker": "^27.0.2", - "p-limit": "^3.0.2", - "postcss": "^8.2.9", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1" + "parse5": "^6.0.1" }, "dependencies": { - "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": {} - }, - "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 - }, - "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, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true } } }, - "css-parse": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-2.0.0.tgz", - "integrity": "sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q=", + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "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==", + "dev": true + }, + "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=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "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==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "piscina": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", + "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", + "dev": true, + "requires": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0", + "nice-napi": "^1.0.2" + } + }, + "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==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "dev": true, "requires": { - "css": "^2.0.0" + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" }, "dependencies": { - "css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" + "ms": "^2.1.1" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "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==", + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "requires": { - "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" + "minimist": "^1.2.6" } } } }, - "css-prefers-color-scheme": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", - "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", + "postcss": { + "version": "8.4.12", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz", + "integrity": "sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==", "dev": true, "requires": { - "postcss": "^7.0.5" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "nanoid": "^3.3.1", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" } }, - "css-select": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", - "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", + "postcss-attribute-case-insensitive": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.0.tgz", + "integrity": "sha512-b4g9eagFGq9T5SWX4+USfVyjIb3liPnjhHHRMP7FMB2kFVpYyfEscV0wP3eaXhKlcHKUut8lt5BGoeylWA/dBQ==", "dev": true, "requires": { - "boolbase": "^1.0.0", - "css-what": "^5.1.0", - "domhandler": "^4.3.0", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" + "postcss-selector-parser": "^6.0.2" } }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "postcss-color-functional-notation": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.2.tgz", + "integrity": "sha512-DXVtwUhIk4f49KK5EGuEdgx4Gnyj6+t2jBSEmxvpIK9QI40tWrpS2Pua8Q7iIZWBrki2QOaeUdEaLPPa91K0RQ==", "dev": true, "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "postcss-value-parser": "^4.2.0" } }, - "css-what": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", - "dev": true - }, - "cssdb": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", - "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==", - "dev": true + "postcss-color-hex-alpha": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.3.tgz", + "integrity": "sha512-fESawWJCrBV035DcbKRPAVmy21LpoyiXdPTuHUfWJ14ZRjY7Y7PA6P4g8z6LQGYhU1WAxkTxjIjurXzoe68Glw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true + "postcss-color-rebeccapurple": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.0.2.tgz", + "integrity": "sha512-SFc3MaocHaQ6k3oZaFwH8io6MdypkUtEy/eXzXEB1vEQlO3S3oDc/FSZA8AsS04Z25RirQhlDlHLh3dn7XewWw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } }, - "cssnano": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.15.tgz", - "integrity": "sha512-ppZsS7oPpi2sfiyV5+i+NbB/3GtQ+ab2Vs1azrZaXWujUSN4o+WdTxlCZIMcT9yLW3VO/5yX3vpyDaQ1nIn8CQ==", - "dev": true, - "requires": { - "cssnano-preset-default": "^5.1.10", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - } - }, - "cssnano-preset-default": { - "version": "5.1.10", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.10.tgz", - "integrity": "sha512-BcpSzUVygHMOnp9uG5rfPzTOCb0GAHQkqtUQx8j1oMNF9A1Q8hziOOhiM4bdICpmrBIU85BE64RD5XGYsVQZNA==", - "dev": true, - "requires": { - "css-declaration-sorter": "^6.0.3", - "cssnano-utils": "^3.0.0", - "postcss-calc": "^8.2.0", - "postcss-colormin": "^5.2.3", - "postcss-convert-values": "^5.0.2", - "postcss-discard-comments": "^5.0.1", - "postcss-discard-duplicates": "^5.0.1", - "postcss-discard-empty": "^5.0.1", - "postcss-discard-overridden": "^5.0.2", - "postcss-merge-longhand": "^5.0.4", - "postcss-merge-rules": "^5.0.4", - "postcss-minify-font-values": "^5.0.2", - "postcss-minify-gradients": "^5.0.4", - "postcss-minify-params": "^5.0.3", - "postcss-minify-selectors": "^5.1.1", - "postcss-normalize-charset": "^5.0.1", - "postcss-normalize-display-values": "^5.0.2", - "postcss-normalize-positions": "^5.0.2", - "postcss-normalize-repeat-style": "^5.0.2", - "postcss-normalize-string": "^5.0.2", - "postcss-normalize-timing-functions": "^5.0.2", - "postcss-normalize-unicode": "^5.0.2", - "postcss-normalize-url": "^5.0.4", - "postcss-normalize-whitespace": "^5.0.2", - "postcss-ordered-values": "^5.0.3", - "postcss-reduce-initial": "^5.0.2", - "postcss-reduce-transforms": "^5.0.2", - "postcss-svgo": "^5.0.3", - "postcss-unique-selectors": "^5.0.2" - } - }, - "cssnano-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.0.tgz", - "integrity": "sha512-Pzs7/BZ6OgT+tXXuF12DKR8SmSbzUeVYCtMBbS8lI0uAm3mrYmkyqCXXPsQESI6kmLfEVBppbdVY/el3hg3nAA==", + "postcss-custom-media": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.0.tgz", + "integrity": "sha512-FvO2GzMUaTN0t1fBULDeIvxr5IvbDXcIatt6pnJghc736nqNgsGao5NT+5+WVLAQiTt6Cb3YUms0jiPaXhL//g==", "dev": true, "requires": {} }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "postcss-custom-properties": { + "version": "12.1.7", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.7.tgz", + "integrity": "sha512-N/hYP5gSoFhaqxi2DPCmvto/ZcRDVjE3T1LiAMzc/bg53hvhcHOLpXOHb526LzBBp5ZlAUhkuot/bfpmpgStJg==", "dev": true, "requires": { - "css-tree": "^1.1.2" + "postcss-value-parser": "^4.2.0" } }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "postcss-custom-selectors": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.0.tgz", + "integrity": "sha512-/1iyBhz/W8jUepjGyu7V1OPcGbc636snN1yXEQCinb6Bwt7KxsiU7/bLQlp8GwAXzCh7cobBU5odNn/2zQWR8Q==", "dev": true, "requires": { - "assert-plus": "^1.0.0" + "postcss-selector-parser": "^6.0.4" } }, - "date-format": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", - "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==", - "dev": true - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "postcss-dir-pseudo-class": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.4.tgz", + "integrity": "sha512-I8epwGy5ftdzNWEYok9VjW9whC4xnelAtbajGv4adql4FIF09rnrxnA9Y8xSHN47y7gqFIv10C5+ImsLeJpKBw==", "dev": true, "requires": { - "ms": "2.1.2" + "postcss-selector-parser": "^6.0.9" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "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=", - "dev": true - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "postcss-double-position-gradients": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.1.tgz", + "integrity": "sha512-jM+CGkTs4FcG53sMPjrrGE0rIvLDdCrqMzgDC5fLI7JHDO7o6QG8C5TQBtExb13hdBdoH9C2QVbG4jo2y9lErQ==", "dev": true, "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" } }, - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "postcss-env-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", "dev": true, "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" + "postcss-value-parser": "^4.2.0" } }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "postcss-focus-visible": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", "dev": true, "requires": { - "clone": "^1.0.2" + "postcss-selector-parser": "^6.0.9" } }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true - }, - "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==", + "postcss-focus-within": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", "dev": true, "requires": { - "object-keys": "^1.0.12" + "postcss-selector-parser": "^6.0.9" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "dev": true, + "requires": {} + }, + "postcss-gap-properties": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.3.tgz", + "integrity": "sha512-rPPZRLPmEKgLk/KlXMqRaNkYTUpE7YC+bOIQFN5xcu1Vp11Y4faIXv6/Jpft6FMnl6YRxZqDZG0qQOW80stzxQ==", + "dev": true, + "requires": {} + }, + "postcss-image-set-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.6.tgz", + "integrity": "sha512-KfdC6vg53GC+vPd2+HYzsZ6obmPqOk6HY09kttU19+Gj1nC3S3XBVEXDHxkhxTohgZqzbUb94bKXvKDnYWBm/A==", "dev": true, "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "postcss-value-parser": "^4.2.0" } }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "postcss-import": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz", + "integrity": "sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g==", "dev": true, "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "dependencies": { - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true + "postcss-initial": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "dev": true, + "requires": {} }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true + "postcss-lab-function": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.0.tgz", + "integrity": "sha512-Zb1EO9DGYfa3CP8LhINHCcTTCTLI+R3t7AX2mKsDzdgVQ/GkCpHOTgOr6HBHslP7XDdVbqgHW5vvRPMdVANQ8w==", + "dev": true, + "requires": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + } }, - "dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", - "dev": true + "postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + } }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true + "postcss-logical": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", + "dev": true, + "requires": {} }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true + "postcss-media-minmax": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "dev": true, + "requires": {} }, - "di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "dev": true + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "requires": {} }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "dev": true, "requires": { - "path-type": "^4.0.0" + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" } }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dev": true, "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" + "postcss-selector-parser": "^6.0.4" } }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, "requires": { - "buffer-indexof": "^1.0.0" + "icss-utils": "^5.0.0" } }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "postcss-nesting": { + "version": "10.1.4", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.4.tgz", + "integrity": "sha512-2ixdQ59ik/Gt1+oPHiI1kHdwEI8lLKEmui9B1nl6163ANLC+GewQn7fXMxJF2JSb4i2MKL96GU8fIiQztK4TTA==", "dev": true, "requires": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" + "postcss-selector-parser": "^6.0.10" } }, - "dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "postcss-overflow-shorthand": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.3.tgz", + "integrity": "sha512-CxZwoWup9KXzQeeIxtgOciQ00tDtnylYIlJBBODqkgS/PU2jISuWOL/mYLHmZb9ZhZiCaNKsCRiLp22dZUtNsg==", "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } + "requires": {} }, - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true + "postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "dev": true, + "requires": {} }, - "domhandler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", - "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "postcss-place": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.4.tgz", + "integrity": "sha512-MrgKeiiu5OC/TETQO45kV3npRjOFxEHthsqGtkh3I1rPbZSbXGD/lZVi9j13cYh+NA8PIAPyk6sGjT9QbRyvSg==", "dev": true, "requires": { - "domelementtype": "^2.2.0" + "postcss-value-parser": "^4.2.0" } }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "postcss-preset-env": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.2.3.tgz", + "integrity": "sha512-Ok0DhLfwrcNGrBn8sNdy1uZqWRk/9FId0GiQ39W4ILop5GHtjJs8bu1MY9isPwHInpVEPWjb4CEcEaSbBLpfwA==", "dev": true, "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" + "autoprefixer": "^10.4.2", + "browserslist": "^4.19.1", + "caniuse-lite": "^1.0.30001299", + "css-blank-pseudo": "^3.0.2", + "css-has-pseudo": "^3.0.3", + "css-prefers-color-scheme": "^6.0.2", + "cssdb": "^5.0.0", + "postcss-attribute-case-insensitive": "^5.0.0", + "postcss-color-functional-notation": "^4.2.1", + "postcss-color-hex-alpha": "^8.0.2", + "postcss-color-rebeccapurple": "^7.0.2", + "postcss-custom-media": "^8.0.0", + "postcss-custom-properties": "^12.1.2", + "postcss-custom-selectors": "^6.0.0", + "postcss-dir-pseudo-class": "^6.0.3", + "postcss-double-position-gradients": "^3.0.4", + "postcss-env-function": "^4.0.4", + "postcss-focus-visible": "^6.0.3", + "postcss-focus-within": "^5.0.3", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^3.0.2", + "postcss-image-set-function": "^4.0.4", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^4.0.3", + "postcss-logical": "^5.0.3", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^10.1.2", + "postcss-overflow-shorthand": "^3.0.2", + "postcss-page-break": "^3.0.4", + "postcss-place": "^7.0.3", + "postcss-pseudo-class-any-link": "^7.0.2", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^5.0.0" } }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "postcss-pseudo-class-any-link": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.2.tgz", + "integrity": "sha512-76XzEQv3g+Vgnz3tmqh3pqQyRojkcJ+pjaePsyhcyf164p9aZsu3t+NWxkZYbcHLK1ju5Qmalti2jPI5IWCe5w==", "dev": true, "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "postcss-selector-parser": "^6.0.10" } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true + "postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "dev": true, + "requires": {} }, - "electron-to-chromium": { - "version": "1.4.46", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.46.tgz", - "integrity": "sha512-UtV0xUA/dibCKKP2JMxOpDtXR74zABevuUEH4K0tvduFSIoxRVcYmQsbB51kXsFTX8MmOyWMt8tuZAlmDOqkrQ==", + "postcss-selector-not": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-5.0.0.tgz", + "integrity": "sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "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==", + "pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "dev": true }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "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==", "dev": true }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", "dev": true }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, - "optional": true, "requires": { - "iconv-lite": "^0.6.2" + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" }, "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "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==", + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true, + "optional": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true + }, + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", "dev": true, "requires": { - "once": "^1.4.0" + "side-channel": "^1.0.4" } }, - "engine.io": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.1.tgz", - "integrity": "sha512-AyMc20q8JUUdvKd46+thc9o7yCZ6iC6MoBCChG5Z1XmFMpp+2+y/oKvwpZTUJB0KCjxScw1dV9c2h5pjiYBLuQ==", + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.0", - "ws": "~8.2.3" + "safe-buffer": "^5.1.0" } }, - "engine.io-parser": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", - "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, "requires": { - "@socket.io/base64-arraybuffer": "~1.0.2" + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" } }, - "enhanced-resolve": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", - "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", "dev": true, "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "pify": "^2.3.0" } }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "dev": true - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, - "err-code": { + "read-package-json-fast": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "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==", "dev": true, "requires": { - "prr": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, - "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==", + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { - "is-arrayish": "^0.2.1" + "picomatch": "^2.2.1" } }, - "es-module-lexer": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.7.1.tgz", - "integrity": "sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw==", + "reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", "dev": true }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "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 }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true + "regenerate-unicode-properties": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } }, - "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=", + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true }, - "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==", + "regenerator-transform": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", "dev": true, "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "@babel/runtime": "^7.8.4" } }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", + "dev": true + }, + "regexp.prototype.flags": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.2.tgz", + "integrity": "sha512-Ynz8fTQW5/1elh+jWU2EDDzeoNbD0OQ0R+D1VJU5ATOkUaro4A9YEkdN2ODQl/8UQFPPpZNw91fOcLFamM7Pww==", "dev": true, "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "regexpu-core": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", + "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", + "dev": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + } }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "regjsgen": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", "dev": true }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "regjsparser": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "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=", "dev": true }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true }, - "eventsource": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", - "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", + "resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "dev": true, "requires": { - "original": "^1.0.0" + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, - "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" - } + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", "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" + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" }, "dependencies": { - "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" - } - }, - "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" - } - }, - "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-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-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" } }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "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 - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, - "express": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", - "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", + "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, "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.4.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.9.6", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.17.2", - "serve-static": "1.14.2", - "setprototypeof": "1.2.0", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "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==", - "dev": true - } + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, - "extend-shallow": { + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "glob": "^7.1.3" } }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "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 + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "queue-microtask": "^1.2.2" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, + "rxjs": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", + "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", "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-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - } + "tslib": "^2.1.0" } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "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==", + "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==", "dev": true }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass": { + "version": "1.49.9", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.9.tgz", + "integrity": "sha512-YlYWkkHP9fbwaFRZQRXgDi3mXZShslVmmo+FVK3kHLUELHHEYrCmL1x6IUjC7wLS6VuJSAFXRQS/DxdsC4xL1A==", "dev": true, "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.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==", + "sass-loader": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.4.0.tgz", + "integrity": "sha512-7xN+8khDIzym1oL9XyS6zP6Ges+Bo2B2xbPrjdMHEYyV3AQYhd/wXeru++3ODHF0zMjYmVadblSKrPrjEkL8mg==", + "dev": true, + "requires": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "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, "requires": { - "reusify": "^1.0.4" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "dependencies": { + "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": {} + }, + "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 + } } }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz", + "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==", "dev": true, "requires": { - "websocket-driver": ">=0.5.1" + "node-forge": "^1" } }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { - "escape-string-regexp": "^1.0.5" + "lru-cache": "^6.0.0" } }, - "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==", + "send": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", "dev": true, - "optional": true + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "1.8.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "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" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + } + } }, - "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==", + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "randombytes": "^2.1.0" } }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", "debug": "2.6.9", - "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" }, "dependencies": { "debug": { @@ -20674,7030 +19338,837 @@ "ms": "2.0.0" } }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true } } }, - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "serve-static": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" } }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, - "flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, - "follow-redirects": { - "version": "1.14.7", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", - "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", - "dev": true + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "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==", + "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==", "dev": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "shebang-regex": "^3.0.0" } }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "requires": { - "map-cache": "^0.2.2" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" } }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "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==", "dev": true }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, + "simplebar": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/simplebar/-/simplebar-5.3.6.tgz", + "integrity": "sha512-FJUMbV+hNDd/m+1/fvD41TXKd5mSdlI5zgBygkaQIV3SffNbcLhSbJT6ufTs8ZNRLJ6i+qc/KCFMqWmvlGWMhA==", "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "@juggle/resize-observer": "^3.3.1", + "can-use-dom": "^0.1.0", + "core-js": "^3.0.1", + "lodash.debounce": "^4.0.8", + "lodash.memoize": "^4.1.2", + "lodash.throttle": "^4.1.1" } }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, + "simplebar-angular": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/simplebar-angular/-/simplebar-angular-2.3.6.tgz", + "integrity": "sha512-chSUdCYCLOdajbCA73oL/OU+H/YFNGGdAYkcYx76YDY81C3sj3vMePjuW8cPgZZHwSCGI+opcl6xoBsCK56fJA==", "requires": { - "minipass": "^3.0.0" + "simplebar": "^5.3.6", + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } } }, - "fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "socket.io": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", + "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==", "dev": true, "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.1.0", + "socket.io-adapter": "~2.3.3", + "socket.io-parser": "~4.0.4" }, "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 - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.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=", + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ms": "2.1.2" } } } }, - "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==", - "dev": true - }, - "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==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "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=", + "socket.io-adapter": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", + "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==", "dev": true }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "socket.io-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", "dev": true, "requires": { - "assert-plus": "^1.0.0" + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" } }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, "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" + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" } }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "socks": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "ip": "^1.1.5", + "smart-buffer": "^4.2.0" } }, - "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 - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "socks-proxy-agent": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", + "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", "dev": true, "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" } }, - "graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", - "dev": true - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "source-map-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.1.tgz", + "integrity": "sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA==", "dev": true, "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" + "abab": "^2.0.5", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.1" }, "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "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" + "safer-buffer": ">= 2.1.2 < 3.0.0" } - }, - "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 } } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", "dev": true, "requires": { - "function-bind": "^1.1.1" + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true + "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==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, "requires": { - "has-symbols": "^1.0.2" + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" } }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "minipass": "^3.1.1" } }, - "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=", + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "streamroller": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.6.tgz", + "integrity": "sha512-Qz32plKq/MZywYyhEatxyYc8vs994Gz0Hu2MSYXXLD233UyPeIeRBZARIIGwFer4Mdb8r3Y2UqKkgyDghM6QCg==", "dev": true, "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "date-format": "^4.0.6", + "debug": "^4.3.4", + "fs-extra": "^10.0.1" }, "dependencies": { - "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" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "ms": "2.1.2" } } } }, - "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "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==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "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==", + "dev": true + } } }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "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==", "dev": true, "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "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==", - "dev": true, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, - "html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", - "dev": true + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "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==", "dev": true }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true + "stylus": { + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.56.0.tgz", + "integrity": "sha512-Ev3fOb4bUElwWu4F9P9WjnnaSpc8XB9OFHSFZSKMFL1CE1oM+oFXWEgAqPmmZIyhBihuqIQlFsVTypiiS9RxeA==", + "dev": true, + "requires": { + "css": "^3.0.0", + "debug": "^4.3.2", + "glob": "^7.1.6", + "safer-buffer": "^2.1.2", + "sax": "~1.2.4", + "source-map": "^0.7.3" + } }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true + "stylus-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-6.2.0.tgz", + "integrity": "sha512-5dsDc7qVQGRoc6pvCL20eYgRUxepZ9FpeK28XhdXaIPP6kXr6nI1zAAKFQgP5OBkOfKaURp4WUpJzspg1f01Gg==", + "dev": true, + "requires": { + "fast-glob": "^3.2.7", + "klona": "^2.0.4", + "normalize-path": "^3.0.0" + } }, - "http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" + "has-flag": "^3.0.0" } }, - "http-parser-js": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz", - "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==", + "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==", "dev": true }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", "dev": true, "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" } }, - "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==", + "terser": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.11.0.tgz", + "integrity": "sha512-uCA9DLanzzWSsN1UirKwylhhRz3aKPInlfmpGfw8VN6jHsAtu8HJtIpeeHHK23rxnE/cDc+yvmq5wqkIC6Kn0A==", "dev": true, "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map": "~0.7.2", + "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 + } } }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "terser-webpack-plugin": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", "dev": true, "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" + "jest-worker": "^27.0.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.0" }, "dependencies": { - "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" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "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": { - "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" - } - } + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "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": { - "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" - } - } - } + "requires": {} }, - "micromatch": { - "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", - "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" - } + "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 }, - "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=", + "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, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "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==", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" } }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } + "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 }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { - "ms": "^2.0.0" + "os-tmpdir": "~1.0.2" } }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "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=", + "dev": true + }, + "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==", "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "is-number": "^7.0.0" } }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "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==", "dev": true }, - "ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", - "dev": true, - "optional": true + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } + "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==", + "dev": true }, - "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==", + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "dependencies": { - "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" - } - }, - "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, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "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, - "requires": { - "p-limit": "^2.0.0" - } - }, - "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 - }, - "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, - "requires": { - "find-up": "^3.0.0" - } - } + "media-typer": "0.3.0", + "mime-types": "~2.1.24" } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", "dev": true }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "typescript": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", "dev": true }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "ua-parser-js": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", + "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", "dev": true }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" } }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", "dev": true }, - "ini": { + "unicode-property-aliases-ecmascript": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true - }, - "inquirer": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.1.1.tgz", - "integrity": "sha512-hUDjc3vBkh/uk1gPfMAD/7Z188Q8cvTGl0nxwaCdwSbzFh6ZKkZh+s2ozVxbE5G9ZNRyeY0+lgbAIOUFsFf98w==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.3.0", - "run-async": "^2.4.0", - "rxjs": "^6.6.6", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "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.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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 - }, - "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 - }, - "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" - } - } - } - }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dev": true, - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - } - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", "dev": true }, - "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-arguments": { + "unique-filename": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "unique-slug": "^2.0.0" } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "dev": true, "requires": { - "binary-extensions": "^2.0.0" + "imurmurhash": "^0.1.4" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, - "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { + "unpipe": { "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-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.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" - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "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" - } - }, - "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": "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==", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "dev": true }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "punycode": "^2.1.0" } }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "is-lambda": { + "utils-merge": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", "dev": true }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "dev": true, - "requires": { - "is-path-inside": "^2.1.0" - } - }, - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "dev": true, - "requires": { - "path-is-inside": "^1.0.2" - } - }, - "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==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "builtins": "^1.0.3" } }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", - "dev": true - }, - "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 - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isbinaryfile": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", - "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "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==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.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==", - "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==", - "dev": true, - "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==", - "dev": true - }, - "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" - } - } - } - }, - "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==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz", - "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jasmine-core": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.7.1.tgz", - "integrity": "sha512-DH3oYDS/AUvvr22+xUBW62m1Xoy7tUlY1tsxKEJvl5JeJ7q8zd1K5bUwiOxdH+erj6l2vAMM3hV25Xs9/WrmuQ==", - "dev": true - }, - "jest-worker": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.2.tgz", - "integrity": "sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.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==", - "dev": true - }, - "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, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "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 - }, - "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==", - "dev": true - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "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=", - "dev": true - }, - "json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", - "dev": true - }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "jsonc-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true - }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "karma": { - "version": "6.3.11", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.11.tgz", - "integrity": "sha512-QGUh4yXgizzDNPLB5nWTvP+wysKexngbyLVWFOyikB661hpa2RZLf5anZQzqliWtAQuYVep0ot0D1U7UQKpsxQ==", - "dev": true, - "requires": { - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "colors": "1.4.0", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.3.0", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.2.0", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "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" - } - }, - "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==", - "dev": true - } - } - }, - "karma-chrome-launcher": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz", - "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==", - "dev": true, - "requires": { - "which": "^1.2.1" - } - }, - "karma-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.0.3.tgz", - "integrity": "sha512-atDvLQqvPcLxhED0cmXYdsPMCQuh6Asa9FMZW1bhNqlVEhJoB9qyZ2BY1gu7D/rr5GLGb5QzYO4siQskxaWP/g==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.1", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.0", - "minimatch": "^3.0.4" - } - }, - "karma-jasmine": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-4.0.1.tgz", - "integrity": "sha512-h8XDAhTiZjJKzfkoO1laMH+zfNlra+dEQHUAjpn5JV1zCPtOIVWGQjLBrqhnzQa/hrU2XrZwSyBa6XjEBzfXzw==", - "dev": true, - "requires": { - "jasmine-core": "^3.6.0" - } - }, - "karma-jasmine-html-reporter": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.7.0.tgz", - "integrity": "sha512-pzum1TL7j90DTE86eFt48/s12hqwQuiD+e5aXx2Dc9wDEn2LfGq6RoAxEZZjFiN0RDSCOnosEKRZWxbQ+iMpQQ==", - "dev": true, - "requires": {} - }, - "karma-source-map-support": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", - "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", - "dev": true, - "requires": { - "source-map-support": "^0.5.5" - } - }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true - }, - "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 - }, - "klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", - "dev": true - }, - "less": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/less/-/less-4.1.1.tgz", - "integrity": "sha512-w09o8tZFPThBscl5d0Ggp3RcrKIouBoQscnOMgFH3n5V3kN/CXGHNfCkRPtxJk6nKryDXaV9aHLK55RXuH4sAw==", - "dev": true, - "requires": { - "copy-anything": "^2.0.1", - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^2.5.2", - "parse-node-version": "^1.0.1", - "source-map": "~0.6.0", - "tslib": "^1.10.0" - }, - "dependencies": { - "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, - "optional": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "optional": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "optional": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "less-loader": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-10.0.0.tgz", - "integrity": "sha512-JjioAkw9qyavL0BzMPUOHJa0a20fh+ipq/MNZH4OkU8qERsCMeZIWRE0FDBIx2O+cFguvY01vHh/lmBA9LyWDg==", - "dev": true, - "requires": { - "klona": "^2.0.4" - } - }, - "license-webpack-plugin": { - "version": "2.3.20", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.3.20.tgz", - "integrity": "sha512-AHVueg9clOKACSHkhmEI+PCC9x8+qsQVuKECZD3ETxETK5h/PCv5/MUzyG1gm8OMcip/s1tcNxqo9Qb7WhjGsg==", - "dev": true, - "requires": { - "@types/webpack-sources": "^0.1.5", - "webpack-sources": "^1.2.0" - } - }, - "lilconfig": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", - "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", - "dev": true - }, - "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==", - "dev": true - }, - "loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "dev": true - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" - }, - "lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "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.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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 - }, - "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 - }, - "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" - } - } - } - }, - "log4js": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", - "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==", - "dev": true, - "requires": { - "date-format": "^3.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.1", - "rfdc": "^1.1.4", - "streamroller": "^2.2.4" - } - }, - "loglevel": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz", - "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.4" - } - }, - "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==", - "dev": true, - "requires": { - "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 - } - } - }, - "make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "dev": true, - "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "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" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "mem": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", - "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^3.1.0" - }, - "dependencies": { - "mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", - "dev": true - } - } - }, - "memfs": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", - "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", - "dev": true, - "requires": { - "fs-monkey": "1.0.3" - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "dependencies": { - "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==", - "dev": true, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "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==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true - }, - "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true - }, - "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dev": true, - "requires": { - "mime-db": "1.51.0" - } - }, - "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 - }, - "mini-css-extract-plugin": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", - "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "webpack-sources": "^1.1.0" - }, - "dependencies": { - "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": {} - }, - "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 - }, - "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, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "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==", - "dev": true - }, - "minipass": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", - "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", - "dev": true, - "requires": { - "encoding": "^0.1.12", - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", - "dev": true, - "requires": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "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" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "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 - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dev": true, - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", - "dev": true, - "optional": true - }, - "nanoid": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", - "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", - "dev": 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", - "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" - } - }, - "needle": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", - "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", - "dev": true, - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, - "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 - }, - "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-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "dev": true - }, - "node-gyp": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", - "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.3", - "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "request": "^2.88.2", - "rimraf": "^3.0.2", - "semver": "^7.3.2", - "tar": "^6.0.2", - "which": "^2.0.2" - }, - "dependencies": { - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true - }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true - }, - "npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", - "dev": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-install-checks": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", - "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", - "dev": true, - "requires": { - "semver": "^7.1.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true - }, - "npm-package-arg": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", - "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" - } - }, - "npm-packlist": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", - "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", - "dev": true, - "requires": { - "glob": "^7.1.6", - "ignore-walk": "^3.0.3", - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-pick-manifest": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", - "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", - "dev": true, - "requires": { - "npm-install-checks": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^8.1.2", - "semver": "^7.3.4" - } - }, - "npm-registry-fetch": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", - "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", - "dev": true, - "requires": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - } - }, - "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, - "requires": { - "path-key": "^2.0.0" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "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", - "kind-of": "^3.0.3" - }, - "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" - } - }, - "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" - } - }, - "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" - } - }, - "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 - } - } - }, - "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" - } - } - } - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "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 - }, - "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" - } - }, - "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, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "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, - "requires": { - "isobject": "^3.0.1" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "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" - } - }, - "open": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/open/-/open-8.2.1.tgz", - "integrity": "sha512-rXILpcQlkF/QuFez2BJDf3GsqpjGKbkUUToAIGo9A0Q6ZkoSGogZJulrUdwRkrAsoQvoZsrjCYt8+zblOk7JQQ==", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - }, - "dependencies": { - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - } - } - }, - "ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.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==", - "dev": true, - "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==", - "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 - }, - "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 - }, - "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" - } - } - } - }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "dev": true, - "requires": { - "url-parse": "^1.4.3" - } - }, - "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 - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.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==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - }, - "dependencies": { - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - } - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", - "dev": true, - "requires": { - "retry": "^0.12.0" - } - }, - "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==", - "dev": true - }, - "pacote": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.4.tgz", - "integrity": "sha512-RfahPCunM9GI7ryJV/zY0bWQiokZyLqaSNHXtbNSoLb7bwTvBbJBEyCJ01KWs4j1Gj7GmX8crYXQ1sNX6P2VKA==", - "dev": true, - "requires": { - "@npmcli/git": "^2.0.1", - "@npmcli/installed-package-contents": "^1.0.6", - "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^1.8.2", - "cacache": "^15.0.5", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.3", - "mkdirp": "^1.0.3", - "npm-package-arg": "^8.0.1", - "npm-packlist": "^2.1.4", - "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^11.0.0", - "promise-retry": "^2.0.1", - "read-package-json-fast": "^2.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.1.0" - } - }, - "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, - "requires": { - "callsites": "^3.0.0" - } - }, - "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==", - "dev": true, - "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" - } - }, - "parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true - }, - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "optional": true - }, - "parse5-html-rewriting-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", - "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", - "dev": true, - "requires": { - "parse5": "^6.0.1", - "parse5-sax-parser": "^6.0.1" - }, - "dependencies": { - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - } - } - }, - "parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "requires": { - "parse5": "^6.0.1" - }, - "dependencies": { - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - } - } - }, - "parse5-sax-parser": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", - "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", - "dev": true, - "requires": { - "parse5": "^6.0.1" - }, - "dependencies": { - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - } - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "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==", - "dev": true - }, - "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=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "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==", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "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==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - } - } - }, - "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 - }, - "postcss": { - "version": "8.3.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", - "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", - "dev": true, - "requires": { - "colorette": "^1.2.2", - "nanoid": "^3.1.23", - "source-map-js": "^0.6.2" - } - }, - "postcss-attribute-case-insensitive": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", - "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^6.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-calc": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.2.tgz", - "integrity": "sha512-B5R0UeB4zLJvxNt1FVCaDZULdzsKLPc6FhjFJ+xwFiq7VG4i9cuaJLxVjNtExNK8ocm3n2o4unXXLiVX1SCqxA==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - } - }, - "postcss-color-functional-notation": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", - "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-color-gray": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", - "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", - "dev": true, - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-color-hex-alpha": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", - "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", - "dev": true, - "requires": { - "postcss": "^7.0.14", - "postcss-values-parser": "^2.0.1" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-color-mod-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", - "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", - "dev": true, - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-color-rebeccapurple": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", - "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-colormin": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.3.tgz", - "integrity": "sha512-dra4xoAjub2wha6RUXAgadHEn2lGxbj8drhFcIGLOMn914Eu7DkPUurugDXgstwttCYkJtZ/+PkWRWdp3UHRIA==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-convert-values": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.2.tgz", - "integrity": "sha512-KQ04E2yadmfa1LqXm7UIDwW1ftxU/QWZmz6NKnHnUvJ3LEYbbcX6i329f/ig+WnEByHegulocXrECaZGLpL8Zg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-custom-media": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", - "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", - "dev": true, - "requires": { - "postcss": "^7.0.14" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-custom-properties": { - "version": "8.0.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", - "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", - "dev": true, - "requires": { - "postcss": "^7.0.17", - "postcss-values-parser": "^2.0.1" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-custom-selectors": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", - "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true - }, - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-dir-pseudo-class": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", - "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true - }, - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-discard-comments": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", - "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", - "dev": true, - "requires": {} - }, - "postcss-discard-duplicates": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", - "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", - "dev": true, - "requires": {} - }, - "postcss-discard-empty": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", - "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", - "dev": true, - "requires": {} - }, - "postcss-discard-overridden": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.2.tgz", - "integrity": "sha512-+56BLP6NSSUuWUXjRgAQuho1p5xs/hU5Sw7+xt9S3JSg+7R6+WMGnJW7Hre/6tTuZ2xiXMB42ObkiZJ2hy/Pew==", - "dev": true, - "requires": {} - }, - "postcss-double-position-gradients": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", - "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", - "dev": true, - "requires": { - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-env-function": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", - "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-focus-visible": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", - "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-focus-within": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", - "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-font-variant": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz", - "integrity": "sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-gap-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", - "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-image-set-function": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", - "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-import": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz", - "integrity": "sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - } - }, - "postcss-initial": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.4.tgz", - "integrity": "sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-lab-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", - "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", - "dev": true, - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-loader": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.1.0.tgz", - "integrity": "sha512-yA/cXBfACkthZNA2hQxOnaReVfQ6uLmvbEDQzNafpbK40URZJvP/28dL1DG174Gvz3ptkkHbbwDBCh+gXR94CA==", - "dev": true, - "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "semver": "^7.3.5" - } - }, - "postcss-logical": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", - "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-media-minmax": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", - "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-merge-longhand": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.4.tgz", - "integrity": "sha512-2lZrOVD+d81aoYkZDpWu6+3dTAAGkCKbV5DoRhnIR7KOULVrI/R7bcMjhrH9KTRy6iiHKqmtG+n/MMj1WmqHFw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.1.0", - "stylehacks": "^5.0.1" - } - }, - "postcss-merge-rules": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.4.tgz", - "integrity": "sha512-yOj7bW3NxlQxaERBB0lEY1sH5y+RzevjbdH4DBJurjKERNpknRByFNdNe+V72i5pIZL12woM9uGdS5xbSB+kDQ==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.0.0", - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-minify-font-values": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.2.tgz", - "integrity": "sha512-R6MJZryq28Cw0AmnyhXrM7naqJZZLoa1paBltIzh2wM7yb4D45TLur+eubTQ4jCmZU9SGeZdWsc5KcSoqTMeTg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-gradients": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.4.tgz", - "integrity": "sha512-RVwZA7NC4R4J76u8X0Q0j+J7ItKUWAeBUJ8oEEZWmtv3Xoh19uNJaJwzNpsydQjk6PkuhRrK+YwwMf+c+68EYg==", - "dev": true, - "requires": { - "colord": "^2.9.1", - "cssnano-utils": "^3.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-params": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.3.tgz", - "integrity": "sha512-NY92FUikE+wralaiVexFd5gwb7oJTIDhgTNeIw89i1Ymsgt4RWiPXfz3bg7hDy4NL6gepcThJwOYNtZO/eNi7Q==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.2", - "browserslist": "^4.16.6", - "cssnano-utils": "^3.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.1.tgz", - "integrity": "sha512-TOzqOPXt91O2luJInaVPiivh90a2SIK5Nf1Ea7yEIM/5w+XA5BGrZGUSW8aEx9pJ/oNj7ZJBhjvigSiBV+bC1Q==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.2", - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "requires": {} - }, - "postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0" - } - }, - "postcss-nesting": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", - "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-normalize-charset": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", - "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", - "dev": true, - "requires": {} - }, - "postcss-normalize-display-values": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.2.tgz", - "integrity": "sha512-RxXoJPUR0shSjkMMzgEZDjGPrgXUVYyWA/YwQRicb48H15OClPuaDR7tYokLAlGZ2tCSENEN5WxjgxSD5m4cUw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-positions": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.2.tgz", - "integrity": "sha512-tqghWFVDp2btqFg1gYob1etPNxXLNh3uVeWgZE2AQGh6b2F8AK2Gj36v5Vhyh+APwIzNjmt6jwZ9pTBP+/OM8g==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-repeat-style": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.2.tgz", - "integrity": "sha512-/rIZn8X9bBzC7KvY4iKUhXUGW3MmbXwfPF23jC9wT9xTi7kAvgj8sEgwxjixBmoL6MVa4WOgxNz2hAR6wTK8tw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-string": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.2.tgz", - "integrity": "sha512-zaI1yzwL+a/FkIzUWMQoH25YwCYxi917J4pYm1nRXtdgiCdnlTkx5eRzqWEC64HtRa06WCJ9TIutpb6GmW4gFw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-timing-functions": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.2.tgz", - "integrity": "sha512-Ao0PP6MoYsRU1LxeVUW740ioknvdIUmfr6uAA3xWlQJ9s69/Tupy8qwhuKG3xWfl+KvLMAP9p2WXF9cwuk/7Bg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-unicode": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.2.tgz", - "integrity": "sha512-3y/V+vjZ19HNcTizeqwrbZSUsE69ZMRHfiiyLAJb7C7hJtYmM4Gsbajy7gKagu97E8q5rlS9k8FhojA8cpGhWw==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-url": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.4.tgz", - "integrity": "sha512-cNj3RzK2pgQQyNp7dzq0dqpUpQ/wYtdDZM3DepPmFjCmYIfceuD9VIAcOdvrNetjIU65g1B4uwdP/Krf6AFdXg==", - "dev": true, - "requires": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-whitespace": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.2.tgz", - "integrity": "sha512-CXBx+9fVlzSgbk0IXA/dcZn9lXixnQRndnsPC5ht3HxlQ1bVh77KQDL1GffJx1LTzzfae8ftMulsjYmO2yegxA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-ordered-values": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.3.tgz", - "integrity": "sha512-T9pDS+P9bWeFvqivXd5ACzQmrCmHjv3ZP+djn8E1UZY7iK79pFSm7i3WbKw2VSmFmdbMm8sQ12OPcNpzBo3Z2w==", - "dev": true, - "requires": { - "cssnano-utils": "^3.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-overflow-shorthand": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", - "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-page-break": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", - "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-place": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", - "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-preset-env": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", - "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", - "dev": true, - "requires": { - "autoprefixer": "^9.6.1", - "browserslist": "^4.6.4", - "caniuse-lite": "^1.0.30000981", - "css-blank-pseudo": "^0.1.4", - "css-has-pseudo": "^0.10.0", - "css-prefers-color-scheme": "^3.1.1", - "cssdb": "^4.4.0", - "postcss": "^7.0.17", - "postcss-attribute-case-insensitive": "^4.0.1", - "postcss-color-functional-notation": "^2.0.1", - "postcss-color-gray": "^5.0.0", - "postcss-color-hex-alpha": "^5.0.3", - "postcss-color-mod-function": "^3.0.3", - "postcss-color-rebeccapurple": "^4.0.1", - "postcss-custom-media": "^7.0.8", - "postcss-custom-properties": "^8.0.11", - "postcss-custom-selectors": "^5.1.2", - "postcss-dir-pseudo-class": "^5.0.0", - "postcss-double-position-gradients": "^1.0.0", - "postcss-env-function": "^2.0.2", - "postcss-focus-visible": "^4.0.0", - "postcss-focus-within": "^3.0.0", - "postcss-font-variant": "^4.0.0", - "postcss-gap-properties": "^2.0.0", - "postcss-image-set-function": "^3.0.1", - "postcss-initial": "^3.0.0", - "postcss-lab-function": "^2.0.1", - "postcss-logical": "^3.0.0", - "postcss-media-minmax": "^4.0.0", - "postcss-nesting": "^7.0.0", - "postcss-overflow-shorthand": "^2.0.0", - "postcss-page-break": "^2.0.0", - "postcss-place": "^4.0.1", - "postcss-pseudo-class-any-link": "^6.0.0", - "postcss-replace-overflow-wrap": "^3.0.0", - "postcss-selector-matches": "^4.0.0", - "postcss-selector-not": "^4.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-pseudo-class-any-link": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", - "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true - }, - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-reduce-initial": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.2.tgz", - "integrity": "sha512-v/kbAAQ+S1V5v9TJvbGkV98V2ERPdU6XvMcKMjqAlYiJ2NtsHGlKYLPjWWcXlaTKNxooId7BGxeraK8qXvzKtw==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.2.tgz", - "integrity": "sha512-25HeDeFsgiPSUx69jJXZn8I06tMxLQJJNF5h7i9gsUg8iP4KOOJ8EX8fj3seeoLt3SLU2YDD6UPnDYVGUO7DEA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-replace-overflow-wrap": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", - "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-selector-matches": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", - "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-selector-not": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz", - "integrity": "sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-selector-parser": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz", - "integrity": "sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-svgo": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.3.tgz", - "integrity": "sha512-41XZUA1wNDAZrQ3XgWREL/M2zSw8LJPvb5ZWivljBsUQAGoEKMYm6okHsTjJxKYI4M75RQEH4KYlEM52VwdXVA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.1.0", - "svgo": "^2.7.0" - } - }, - "postcss-unique-selectors": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.2.tgz", - "integrity": "sha512-w3zBVlrtZm7loQWRPVC0yjUwwpty7OM6DnEHkxcSQXO1bMS3RJ+JUS5LFMSDZHJcvGsRwhZinCWVqn8Kej4EDA==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.2", - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "postcss-values-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", - "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", - "dev": true, - "requires": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true - }, - "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==", - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "dev": true - }, - "qs": { - "version": "6.9.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", - "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", - "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", - "dev": true, - "requires": { - "bytes": "3.1.1", - "http-errors": "1.8.1", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "raw-loader": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", - "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "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": {} - }, - "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 - }, - "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, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", - "dev": true, - "requires": { - "pify": "^2.3.0" - } - }, - "read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "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==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", - "dev": true - }, - "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 - }, - "regenerate-unicode-properties": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", - "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", - "dev": true, - "requires": { - "regenerate": "^1.4.2" - } - }, - "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 - }, - "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, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "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, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", - "dev": true - }, - "regexp.prototype.flags": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", - "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "regexpu-core": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", - "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", - "dev": true, - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^9.0.0", - "regjsgen": "^0.5.2", - "regjsparser": "^0.7.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - } - }, - "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true - }, - "regjsparser": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", - "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "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 - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "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=", - "dev": true - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "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" - }, - "dependencies": { - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "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=", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "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 - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "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 - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "resolve-url-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", - "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", - "dev": true, - "requires": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^7.0.35", - "source-map": "0.6.1" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "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, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "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 - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "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 - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "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==", - "dev": true - }, - "safe-regex": { - "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" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sass": { - "version": "1.35.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.35.1.tgz", - "integrity": "sha512-oCisuQJstxMcacOPmxLNiLlj4cUyN2+8xJnG7VanRoh2GOLr9RqkvI4AxA4a6LHVg/rsu+PmxXeGhrdSF9jCiQ==", - "dev": true, - "requires": { - "chokidar": ">=3.0.0 <4.0.0" - } - }, - "sass-loader": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.1.0.tgz", - "integrity": "sha512-FVJZ9kxVRYNZTIe2xhw93n3xJNYZADr+q69/s98l9nTCrWASo+DR2Ot0s5xTKQDDEosUkatsGeHxcH4QBp5bSg==", - "dev": true, - "requires": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "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, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "dependencies": { - "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": {} - }, - "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 - } - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "selfsigned": { - "version": "1.10.14", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz", - "integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", - "dev": true, - "requires": { - "node-forge": "^0.10.0" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "1.8.1", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "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" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "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" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", - "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.2" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "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", - "is-plain-object": "^2.0.3", - "split-string": "^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" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - } - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "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, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "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 - }, - "signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true - }, - "simplebar": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/simplebar/-/simplebar-5.3.6.tgz", - "integrity": "sha512-FJUMbV+hNDd/m+1/fvD41TXKd5mSdlI5zgBygkaQIV3SffNbcLhSbJT6ufTs8ZNRLJ6i+qc/KCFMqWmvlGWMhA==", - "requires": { - "@juggle/resize-observer": "^3.3.1", - "can-use-dom": "^0.1.0", - "core-js": "^3.0.1", - "lodash.debounce": "^4.0.8", - "lodash.memoize": "^4.1.2", - "lodash.throttle": "^4.1.1" - } - }, - "simplebar-angular": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/simplebar-angular/-/simplebar-angular-2.3.6.tgz", - "integrity": "sha512-chSUdCYCLOdajbCA73oL/OU+H/YFNGGdAYkcYx76YDY81C3sj3vMePjuW8cPgZZHwSCGI+opcl6xoBsCK56fJA==", - "requires": { - "simplebar": "^5.3.6", - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true - }, - "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, - "requires": { - "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" - }, - "dependencies": { - "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" - } - }, - "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" - } - }, - "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-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-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" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "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 - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "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" - } - } - } - }, - "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, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^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" - } - } - } - }, - "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, - "requires": { - "kind-of": "^3.2.0" - }, - "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" - } - } - } - }, - "socket.io": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", - "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.1.0", - "socket.io-adapter": "~2.3.3", - "socket.io-parser": "~4.0.4" - }, - "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - } - } - }, - "socket.io-adapter": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", - "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==", - "dev": true - }, - "socket.io-parser": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", - "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", - "dev": true, - "requires": { - "@types/component-emitter": "^1.2.10", - "component-emitter": "~1.3.0", - "debug": "~4.3.1" - } - }, - "sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "sockjs-client": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.2.tgz", - "integrity": "sha512-ZzRxPBISQE7RpzlH4tKJMQbHM9pabHluk0WBaxAQ+wm/UieeBVBou0p4wVnSQGN9QmpAZygQ0cDIypWuqOFmFQ==", - "dev": true, - "requires": { - "debug": "^3.2.6", - "eventsource": "^1.0.7", - "faye-websocket": "^0.11.3", - "inherits": "^2.0.4", - "json3": "^3.3.3", - "url-parse": "^1.5.3" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "socks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", - "dev": true, - "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" - } - }, - "socks-proxy-agent": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", - "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.1", - "socks": "^2.6.1" - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - }, - "source-map-js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", - "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", - "dev": true - }, - "source-map-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.0.tgz", - "integrity": "sha512-GKGWqWvYr04M7tn8dryIWvb0s8YM41z82iQv01yBtIylgxax0CwvSy6gc2Y02iuXwEfGWRlMicH0nvms9UZphw==", - "dev": true, - "requires": { - "abab": "^2.0.5", - "iconv-lite": "^0.6.2", - "source-map-js": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "source-map-resolve": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", - "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0" - } - }, - "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==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "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" - } - }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "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" - } - }, - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, - "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, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "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" - } - }, - "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-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-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" - } - }, - "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 - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "streamroller": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", - "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", - "dev": true, - "requires": { - "date-format": "^2.1.0", - "debug": "^4.1.1", - "fs-extra": "^8.1.0" - }, - "dependencies": { - "date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", - "dev": true - } - } - }, - "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==", - "dev": true, - "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==", - "dev": true - } - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "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 - }, - "style-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", - "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "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": {} - }, - "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 - }, - "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, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "stylehacks": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", - "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", - "dev": true, - "requires": { - "browserslist": "^4.16.0", - "postcss-selector-parser": "^6.0.4" - } - }, - "stylus": { - "version": "0.54.8", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.8.tgz", - "integrity": "sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg==", - "dev": true, - "requires": { - "css-parse": "~2.0.0", - "debug": "~3.1.0", - "glob": "^7.1.6", - "mkdirp": "~1.0.4", - "safer-buffer": "^2.1.2", - "sax": "~1.2.4", - "semver": "^6.3.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "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 - } - } - }, - "stylus-loader": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-6.1.0.tgz", - "integrity": "sha512-qKO34QCsOtSJrXxQQmXsPeaVHh6hMumBAFIoJTcsSr2VzrA6o/CW9HCGR8spCjzJhN8oKQHdj/Ytx0wwXyElkw==", - "dev": true, - "requires": { - "fast-glob": "^3.2.5", - "klona": "^2.0.4", - "normalize-path": "^3.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dev": true, - "requires": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - } - }, - "symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", - "dev": true - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - }, - "tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - }, - "terser": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", - "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "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 - } - } - }, - "terser-webpack-plugin": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz", - "integrity": "sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A==", - "dev": true, - "requires": { - "jest-worker": "^27.0.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.7.0" - }, - "dependencies": { - "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": {} - }, - "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 - }, - "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, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "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 - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "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=", - "dev": true - }, - "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, - "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" - } - } - } - }, - "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, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.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==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "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==", - "dev": true - }, - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "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=", - "dev": true - }, - "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==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typescript": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", - "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", - "dev": true - }, - "ua-parser-js": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", - "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", - "dev": true - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", - "dev": true - }, - "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, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - } - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "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" - }, - "dependencies": { - "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, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "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" - } - } - } - }, - "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 - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "url-parse": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.4.tgz", - "integrity": "sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg==", - "dev": true, - "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==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", - "dev": true, - "requires": { - "builtins": "^1.0.3" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "dev": true - }, - "watchpack": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", - "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "webpack": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.44.0.tgz", - "integrity": "sha512-I1S1w4QLoKmH19pX6YhYN0NiSXaWY8Ou00oA+aMcr9IUGeF5azns+IKBkfoAAG9Bu5zOIzZt/mN35OffBya8AQ==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.7.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" - }, - "dependencies": { - "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": {} - }, - "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 - }, - "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, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "webpack-sources": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", - "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", - "dev": true, - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - } - } - } - }, - "webpack-dev-middleware": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.0.0.tgz", - "integrity": "sha512-9zng2Z60pm6A98YoRcA0wSxw1EYn7B7y5owX/Tckyt9KGyULTkLtiavjaXlWqOMkM0YtqGgL3PvMOFgyFLq8vw==", - "dev": true, - "requires": { - "colorette": "^1.2.2", - "mem": "^8.1.1", - "memfs": "^3.2.2", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "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": {} - }, - "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 - }, - "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, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "webpack-dev-server": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", - "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", - "dev": true, - "requires": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.8", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "sockjs-client": "^1.5.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" - }, - "dependencies": { - "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-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "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" - }, - "dependencies": { - "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, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "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" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "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 - }, - "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" - } - } - } - }, - "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 - }, - "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-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" - } - }, - "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" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, + "watchpack": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webpack": { + "version": "5.70.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.70.0.tgz", + "integrity": "sha512-ZMWWy8CeuTTjCxbeaQI21xSswseF2oNOwc70QSKNePvmxE7XW36i7vpBMYZFAUHPwQiEbNGCEYIOOlyRbdGmxw==", + "dev": 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.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.9.2", + "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-better-errors": "^1.0.2", + "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.3.1", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "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": { - "binary-extensions": "^1.0.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "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-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "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": { - "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" - } - } - } + "requires": {} }, "json-schema-traverse": { "version": "0.4.1", @@ -27705,285 +20176,109 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "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, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "micromatch": { - "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", - "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" - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "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, - "requires": { - "p-limit": "^2.0.0" - } - }, - "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 - }, - "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==", - "dev": true, - "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" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "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, "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } - }, + } + } + }, + "webpack-dev-middleware": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.0.tgz", + "integrity": "sha512-MouJz+rXAm9B1OTOYaJnn6rtD/lWZPy2ufQCH3BPs8Rloh/Du6Jze4p7AeLYHkVi0giJnYLaSGDC7S+GM9arhg==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.2.2", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "dependencies": { "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + } + } + }, + "webpack-dev-server": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.3.tgz", + "integrity": "sha512-mlxq2AsIw2ag016nixkzUkdyOE8ST2GTy34uKSABp1c4nhjZvH90D5ZRR+UOLSsG4Z3TFahAi72a3ymRtfRm+Q==", + "dev": true, + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/serve-index": "^1.9.1", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.2.2", + "ansi-html-community": "^0.0.8", + "bonjour": "^3.5.0", + "chokidar": "^3.5.2", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "default-gateway": "^6.0.3", + "del": "^6.0.0", + "express": "^4.17.1", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.0", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "portfinder": "^1.0.28", + "schema-utils": "^4.0.0", + "selfsigned": "^2.0.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "spdy": "^4.0.2", + "strip-ansi": "^7.0.0", + "webpack-dev-middleware": "^5.3.0", + "ws": "^8.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "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==", + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "dependencies": { - "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 - }, - "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" - } - } + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.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=", - "dev": true, - "requires": { - "ansi-regex": "^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.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "ansi-regex": "^6.0.1" } - }, - "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, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", - "dev": true, - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - } - }, - "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==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "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 - }, - "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" - } - } - } - }, - "ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "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" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dev": true, - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true } } }, @@ -27998,30 +20293,18 @@ } }, "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } + "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 }, "webpack-subresource-integrity": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.5.2.tgz", - "integrity": "sha512-GBWYBoyalbo5YClwWop9qe6Zclp8CIXYGIz12OPclJhIrSplDxs1Ls1JDMH8xBPPrg1T6ISaTW9Y6zOrwEiAzw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", "dev": true, "requires": { - "webpack-sources": "^1.3.0" + "typed-assert": "^1.0.8" } }, "websocket-driver": { @@ -28050,12 +20333,6 @@ "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=", - "dev": true - }, "wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -28140,9 +20417,9 @@ "dev": true }, "yargs": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", - "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", + "version": "17.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz", + "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==", "dev": true, "requires": { "cliui": "^7.0.2", @@ -28155,9 +20432,9 @@ } }, "yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", "dev": true }, "yocto-queue": { @@ -28167,11 +20444,11 @@ "dev": true }, "zone.js": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.4.tgz", - "integrity": "sha512-DDh2Ab+A/B+9mJyajPjHFPWfYU1H+pdun4wnnk0OcQTNjem1XQSZ2CDW+rfZEUDjv5M19SBqAkjZi0x5wuB5Qw==", + "version": "0.11.5", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.5.tgz", + "integrity": "sha512-D1/7VxEuQ7xk6z/kAROe4SUbd9CzxY4zOwVGnGHerd/SgLIVU5f4esDzQUsOCeArn933BZfWMKydH7l7dPEp0g==", "requires": { - "tslib": "^2.0.0" + "tslib": "^2.3.0" } } } diff --git a/frontend/package.json b/frontend/package.json index 40ec2740a..9fb38349b 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -10,33 +10,33 @@ }, "private": true, "dependencies": { - "@angular/animations": "~12.1.0", - "@angular/cdk": "^12.1.1", - "@angular/common": "~12.1.0", - "@angular/compiler": "~12.1.0", - "@angular/core": "~12.1.0", - "@angular/forms": "~12.1.0", - "@angular/material": "^12.1.1", - "@angular/platform-browser": "~12.1.0", - "@angular/platform-browser-dynamic": "~12.1.0", - "@angular/router": "~12.1.0", - "rxjs": "~6.6.0", - "simplebar-angular": "^2.3.5", - "tslib": "^2.2.0", - "zone.js": "~0.11.4" + "@angular/animations": "~13.3.3", + "@angular/cdk": "^13.3.3", + "@angular/common": "~13.3.3", + "@angular/compiler": "~13.3.3", + "@angular/core": "~13.3.3", + "@angular/forms": "~13.3.3", + "@angular/material": "^13.3.3", + "@angular/platform-browser": "~13.3.3", + "@angular/platform-browser-dynamic": "~13.3.3", + "@angular/router": "~13.3.3", + "rxjs": "~7.5.5", + "simplebar-angular": "^2.3.6", + "tslib": "^2.3.1", + "zone.js": "~0.11.5" }, "devDependencies": { - "@angular-devkit/build-angular": "~12.1.0", - "@angular/cli": "~12.1.0", - "@angular/compiler-cli": "~12.1.0", - "@types/jasmine": "~3.6.0", - "@types/node": "^12.11.1", - "jasmine-core": "~3.7.0", - "karma": "~6.3.0", - "karma-chrome-launcher": "~3.1.0", - "karma-coverage": "~2.0.3", - "karma-jasmine": "~4.0.0", - "karma-jasmine-html-reporter": "^1.5.0", - "typescript": "~4.3.2" + "@angular-devkit/build-angular": "^13.3.3", + "@angular/cli": "~13.3.3", + "@angular/compiler-cli": "~13.3.3", + "@types/jasmine": "~4.0.2", + "@types/node": "^17.0.24", + "jasmine-core": "~4.1.0", + "karma": "~6.3.18", + "karma-chrome-launcher": "~3.1.1", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.0.0", + "karma-jasmine-html-reporter": "^1.7.0", + "typescript": "~4.6.3" } } From 94ae2864781e297a9df25d774a90558e50a25af9 Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Tue, 19 Apr 2022 14:18:59 +0200 Subject: [PATCH 076/143] Fix Ang 13 upgrade issue --- frontend/Dockerfile | 4 ++-- frontend/src/custom-theme.scss | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/Dockerfile b/frontend/Dockerfile index d04df5c78..a94dc08c9 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -1,4 +1,4 @@ -ARG BASE_IMAGE=node:14 +ARG BASE_IMAGE=node:17 FROM $BASE_IMAGE as build COPY ./ /work/ @@ -8,4 +8,4 @@ RUN npm run build FROM nginxinc/nginx-unprivileged:latest COPY nginx.conf /etc/nginx/nginx.conf -COPY --from=build /work/dist/t4cclient /usr/share/nginx/html \ No newline at end of file +COPY --from=build /work/dist/t4cclient /usr/share/nginx/html diff --git a/frontend/src/custom-theme.scss b/frontend/src/custom-theme.scss index 589d8ad1c..c08bfd479 100644 --- a/frontend/src/custom-theme.scss +++ b/frontend/src/custom-theme.scss @@ -1,4 +1,4 @@ -@use "~@angular/material" as mat; +@use "@angular/material" as mat; @include mat.core(); From 29ba218921584aa7178ebddf404ef8885dd6a94f Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Tue, 19 Apr 2022 14:37:45 +0200 Subject: [PATCH 077/143] Do not build T4C images by default --- Makefile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index c0a50717a..6a3ca894c 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,9 @@ EASE_DEBUG_PORT = 3390 all: backend frontend -build: backend frontend capella ease +build: backend frontend capella + +build-all: build ease backend: docker build -t t4c/client/backend -t $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/capella/collab/backend backend @@ -75,7 +77,7 @@ helm-cleanup: helm uninstall \ --kube-context k3d-$(CLUSTER_NAME) \ --namespace $(NAMESPACE) \ - $(RELEASE) ./helm + $(RELEASE) clear-backend-db: kubectl delete deployment -n t4c-manager $(RELEASE)-backend-postgres From 738faa0fffa4c5ff6241c9674ca46cb7101377ce Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Thu, 21 Apr 2022 11:25:16 +0200 Subject: [PATCH 078/143] Disable MSYS Path conversion. This will allow the use of the Makefiles with the Git Bash on Windows --- backend/Makefile | 3 ++- mocks/oauth/Makefile | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/backend/Makefile b/backend/Makefile index a8af461f2..61647a0a9 100644 --- a/backend/Makefile +++ b/backend/Makefile @@ -12,7 +12,8 @@ database: postgres app: - export REQUESTS_CA_BUNDLE=$$(pwd)/../certs/localhost.crt && \ + export MSYS_NO_PATHCONV=1; \ + export REQUESTS_CA_BUNDLE=$$(pwd)/../certs/localhost.crt; \ $(VENV)/uvicorn t4cclient.__main__:app --reload dev: database app diff --git a/mocks/oauth/Makefile b/mocks/oauth/Makefile index 3b80b0786..f467b28da 100644 --- a/mocks/oauth/Makefile +++ b/mocks/oauth/Makefile @@ -1,6 +1,7 @@ CERTS_DIR = ../../certs/ ssl: + export MSYS_NO_PATHCONV=1; \ openssl req -x509 -out $(CERTS_DIR)localhost.crt -keyout $(CERTS_DIR)localhost.key \ -newkey rsa:2048 -nodes -sha256 \ -subj '/CN=localhost' \ @@ -8,6 +9,7 @@ ssl: openssl pkcs12 -export -in $(CERTS_DIR)localhost.crt -inkey $(CERTS_DIR)localhost.key -out $(CERTS_DIR)localhost.p12 -passout "pass:" start: + export MSYS_NO_PATHCONV=1; \ docker start oauth-mock || \ docker run \ --name oauth-mock \ From 8c7496b39de2a96538160894c4d4f421883e1d69 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Thu, 21 Apr 2022 12:18:09 +0200 Subject: [PATCH 079/143] Add OpenShift Networkpolicy Resolves #50 --- .../sessions/sessions.networkpolicy.yaml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 helm/templates/sessions/sessions.networkpolicy.yaml diff --git a/helm/templates/sessions/sessions.networkpolicy.yaml b/helm/templates/sessions/sessions.networkpolicy.yaml new file mode 100644 index 000000000..a31a3cc49 --- /dev/null +++ b/helm/templates/sessions/sessions.networkpolicy.yaml @@ -0,0 +1,16 @@ +{{- if eq .Values.cluster.kind "OpenShift" }} +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: {{ $.Release.Name }}-allow-from-t4c-manager-namespace + namespace: {{ .Values.backend.k8sSessionNamespace }} +spec: + podSelector: {} + ingress: + - from: + - namespaceSelector: + matchLabels: + kubernetes.io/metadata.name: {{ .Release.Namespace }} + policyTypes: + - Ingress +{{ end }} \ No newline at end of file From ab689fd323ce0dc739427146f2f49b3a01b4f751 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Thu, 21 Apr 2022 13:44:28 +0200 Subject: [PATCH 080/143] Update values.yaml for the use of local oauth mock --- helm/config/backend.yaml | 3 +++ helm/values.yaml | 14 +++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/helm/config/backend.yaml b/helm/config/backend.yaml index 5132a5477..fc11b3a1a 100644 --- a/helm/config/backend.yaml +++ b/helm/config/backend.yaml @@ -36,6 +36,9 @@ authentication: endpoints: tokenIssuance: "{{ .Values.backend.authentication.oauth.endpoints.tokenIssuance }}" authorization: "{{ .Values.backend.authentication.oauth.endpoints.authorization }}" + wellKnown: "{{ .Values.backend.authentication.oauth.endpoints.wellKnown }}" + + audience: "{{ .Values.backend.authentication.oauth.audience }}" publicKey: | {{- .Values.backend.authentication.oauth.publicKey | nindent 6}} diff --git a/helm/values.yaml b/helm/values.yaml index 62201d959..002fe09c7 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -97,17 +97,21 @@ guacamole: backend: authentication: - provider: azure # oauth | azure + provider: oauth # oauth | azure jwt: - usernameClaim: preferred_username + usernameClaim: sub oauth: # Only required when using provider oauth endpoints: # Endpoint that issues JWT Tokens - tokenIssuance: tbd + tokenIssuance: https://localhost:8080/mock/oauth/default/token # Endpoint that authorizes the User - authorization: tbd + authorization: https://localhost:8080/mock/oauth/default/authorize + # wellKnown Endpoint + wellKnown: https://localhost:8081/mock/oauth/default/.well-known/openid-configuration + + audience: default publicKey: | -----BEGIN PUBLIC KEY----- @@ -119,7 +123,7 @@ backend: # OAUTH2 Client Secret secret: tbd - redirectURI: tbd + redirectURI: http://localhost:8081/oauth2/callback azure: # Only required when using provider oauth From c2059806489d49a5f862c28ec8c78c30fb8b1d04 Mon Sep 17 00:00:00 2001 From: henrik997 Date: Thu, 21 Apr 2022 15:54:04 +0200 Subject: [PATCH 081/143] frontend-settings: improve user search --- .../admin-user-settings/admin-user-settings.component.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/settings/admin-settings/admin-user-settings/admin-user-settings.component.ts b/frontend/src/app/settings/admin-settings/admin-user-settings/admin-user-settings.component.ts index 716840f1e..edc8dd2f1 100644 --- a/frontend/src/app/settings/admin-settings/admin-user-settings/admin-user-settings.component.ts +++ b/frontend/src/app/settings/admin-settings/admin-user-settings/admin-user-settings.component.ts @@ -72,7 +72,8 @@ export class AdminUserSettingsComponent implements OnInit { getUsersByRole(role: 'administrator' | 'user'): Array { return this.users.filter( - (u) => u.role == role && u.name.includes(this.search.toLowerCase()) + (u) => u.role == role + && u.name.toLowerCase().includes(this.search.toLowerCase()) ); } } From 411033daf30ec906e90bf4ed20074e2cc37d1880 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 22 Apr 2022 15:20:30 +0200 Subject: [PATCH 082/143] Make scope configurable --- backend/config/config_template.yaml | 2 ++ .../core/authentication/provider/oauth/flow.py | 6 +++++- helm/config/backend.yaml | 3 +++ helm/values.yaml | 12 ++++-------- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/backend/config/config_template.yaml b/backend/config/config_template.yaml index 29299ae85..e044df66f 100644 --- a/backend/config/config_template.yaml +++ b/backend/config/config_template.yaml @@ -56,6 +56,8 @@ authentication: publicKey: | + scopes: + - openid client: id: diff --git a/backend/t4cclient/core/authentication/provider/oauth/flow.py b/backend/t4cclient/core/authentication/provider/oauth/flow.py index a20a60a09..861cbdd26 100644 --- a/backend/t4cclient/core/authentication/provider/oauth/flow.py +++ b/backend/t4cclient/core/authentication/provider/oauth/flow.py @@ -6,8 +6,12 @@ cfg = config["authentication"]["oauth"] + +auth_args = {} +if cfg["scopes"]: + auth_args["scopes"] = cfg["scopes"] auth_session = OAuth2Session( - cfg["client"]["id"], redirect_uri=cfg["redirectURI"], scope="openid" + cfg["client"]["id"], redirect_uri=cfg["redirectURI"], **auth_args ) diff --git a/helm/config/backend.yaml b/helm/config/backend.yaml index fc11b3a1a..359f66786 100644 --- a/helm/config/backend.yaml +++ b/helm/config/backend.yaml @@ -43,6 +43,9 @@ authentication: publicKey: | {{- .Values.backend.authentication.oauth.publicKey | nindent 6}} + scopes: + {{- toYaml .Values.backend.authentication.oauth.scopes | nindent 6}} + client: id: "{{ .Values.backend.authentication.oauth.client.id }}" secret: "{{ .Values.backend.authentication.oauth.client.secret }}" diff --git a/helm/values.yaml b/helm/values.yaml index 002fe09c7..611e1480d 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -117,6 +117,9 @@ backend: -----BEGIN PUBLIC KEY----- -----END PUBLIC KEY----- + scopes: + - openid + client: # OAUTH2 Client ID id: tbd @@ -208,11 +211,4 @@ cluster: # The following values are appended to each container service: - fqdn: capella.example.de - - proxies: - # You can set or unset proxies here, which are used for the internal communication in the cluster - internal: - # Allowed keys: http, https - http: "" - https: "" \ No newline at end of file + fqdn: capella.example.de \ No newline at end of file From fbe488626286662561a7fd240ed22d9d20b25ddd Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 22 Apr 2022 15:37:58 +0200 Subject: [PATCH 083/143] Don't use proxy for internal cluster requests --- backend/t4cclient/extensions/guacamole.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/backend/t4cclient/extensions/guacamole.py b/backend/t4cclient/extensions/guacamole.py index 1ab76703b..35e391055 100644 --- a/backend/t4cclient/extensions/guacamole.py +++ b/backend/t4cclient/extensions/guacamole.py @@ -8,6 +8,10 @@ cfg = config["extensions"]["guacamole"] GUACAMOLE_PREFIX = cfg["baseURI"] + "/api/session/data/postgresql" headers = {"Content-Type": "application/x-www-form-urlencoded"} +proxies = { + "http": None, + "https": None, +} def get_admin_token() -> str: @@ -16,6 +20,7 @@ def get_admin_token() -> str: auth=HTTPBasicAuth(cfg["username"], cfg["password"]), headers=headers, timeout=config["requests"]["timeout"], + proxies=proxies, ) r.raise_for_status() return r.json()["authToken"] @@ -27,6 +32,7 @@ def get_token(username: str, password: str) -> str: auth=HTTPBasicAuth(username, password), headers=headers, timeout=config["requests"]["timeout"], + proxies=proxies, ) r.raise_for_status() return r.json() @@ -41,6 +47,7 @@ def create_user( GUACAMOLE_PREFIX + "/users?token=" + token, json={"username": username, "password": password, "attributes": {}}, timeout=config["requests"]["timeout"], + proxies=proxies, ) r.raise_for_status() return r.json() @@ -57,6 +64,7 @@ def assign_user_to_connection(token: str, username: str, connection_id: str): } ], timeout=config["requests"]["timeout"], + proxies=proxies, ) r.raise_for_status() @@ -65,6 +73,7 @@ def delete_user(token: str, username: str): r = requests.delete( f"{GUACAMOLE_PREFIX}/users/{username}?token={token}", timeout=config["requests"]["timeout"], + proxies=proxies, ) r.raise_for_status() return r.json() @@ -74,6 +83,7 @@ def delete_connection(token: str, connection_name: str): r = requests.delete( f"{GUACAMOLE_PREFIX}/connections/{connection_name}?token={token}", timeout=config["requests"]["timeout"], + proxies=proxies, ) r.raise_for_status() return r.json() @@ -102,6 +112,7 @@ def create_connection( "attributes": {}, }, timeout=config["requests"]["timeout"], + proxies=proxies, ) r.raise_for_status() From 610470de5d1044a6f1ad571e9adced30e1f9fec7 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 22 Apr 2022 17:21:18 +0200 Subject: [PATCH 084/143] Rename scopes to scope --- backend/t4cclient/core/authentication/provider/oauth/flow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/t4cclient/core/authentication/provider/oauth/flow.py b/backend/t4cclient/core/authentication/provider/oauth/flow.py index 861cbdd26..35caea669 100644 --- a/backend/t4cclient/core/authentication/provider/oauth/flow.py +++ b/backend/t4cclient/core/authentication/provider/oauth/flow.py @@ -9,7 +9,7 @@ auth_args = {} if cfg["scopes"]: - auth_args["scopes"] = cfg["scopes"] + auth_args["scope"] = cfg["scopes"] auth_session = OAuth2Session( cfg["client"]["id"], redirect_uri=cfg["redirectURI"], **auth_args ) From 4f1d2f011a0259aab028cb87c77e7fc42bfb690f Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 25 Apr 2022 10:33:31 +0200 Subject: [PATCH 085/143] Customize authProvider --- frontend/src/app/auth/auth/auth.component.html | 4 +--- frontend/src/app/auth/auth/auth.component.ts | 3 +++ 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/auth/auth/auth.component.html b/frontend/src/app/auth/auth/auth.component.html index 34fb713a6..409716bf9 100644 --- a/frontend/src/app/auth/auth/auth.component.html +++ b/frontend/src/app/auth/auth/auth.component.html @@ -4,12 +4,10 @@

Capella Collaboration Manager

This service enables co-working on Capella MBSE projects.
To continue to the service you need an invite from an existing user.
- The service is currently operated in a proof-of-concept mode and does not - allow for production work.

diff --git a/frontend/src/app/auth/auth/auth.component.ts b/frontend/src/app/auth/auth/auth.component.ts index d737909dc..a949c412b 100644 --- a/frontend/src/app/auth/auth/auth.component.ts +++ b/frontend/src/app/auth/auth/auth.component.ts @@ -6,6 +6,7 @@ import { SimpleChanges, } from '@angular/core'; import { AuthService } from 'src/app/services/auth/auth.service'; +import { environment } from 'src/environments/environment'; @Component({ selector: 'app-auth', @@ -20,6 +21,8 @@ export class AuthComponent implements OnInit { } } + authProvider = environment.authentication; + constructor(private authService: AuthService) {} ngOnInit(): void {} From 61831a1b49de1d39c89f197ee7a02c6b05c37364 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 25 Apr 2022 10:33:52 +0200 Subject: [PATCH 086/143] Customize platform provider --- frontend/src/app/footer/footer.component.html | 2 +- frontend/src/app/footer/footer.component.ts | 3 +++ frontend/src/environments/environment.ts | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/footer/footer.component.html b/frontend/src/app/footer/footer.component.html index 1fdb85999..e801f1fcf 100644 --- a/frontend/src/app/footer/footer.component.html +++ b/frontend/src/app/footer/footer.component.html @@ -1,6 +1,6 @@ diff --git a/frontend/src/app/footer/footer.component.ts b/frontend/src/app/footer/footer.component.ts index ccf8d0634..a9c7a0a49 100644 --- a/frontend/src/app/footer/footer.component.ts +++ b/frontend/src/app/footer/footer.component.ts @@ -1,5 +1,6 @@ import { Component, OnInit } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; +import { environment } from 'src/environments/environment'; import { TermsConditionsComponent } from './terms-conditions/terms-conditions.component'; @Component({ @@ -10,6 +11,8 @@ import { TermsConditionsComponent } from './terms-conditions/terms-conditions.co export class FooterComponent implements OnInit { constructor(public dialog: MatDialog) {} + provider = environment.provider; + ngOnInit(): void {} openTC(): void { diff --git a/frontend/src/environments/environment.ts b/frontend/src/environments/environment.ts index 3a3a3a7bb..970abb3ea 100644 --- a/frontend/src/environments/environment.ts +++ b/frontend/src/environments/environment.ts @@ -3,6 +3,7 @@ export const environment = { backend_url: '/api/v1', privacy: 'https://example.com/privacy', imprint: 'https://example.com/imprint', + provider: 'PROVIDER', authentication: 'AUTHENTICATION_TYPE', usernameAttribute: 'attribute', }; From 45d6543b49534f63b186571abb2a76fec8c2ecca Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 25 Apr 2022 10:34:16 +0200 Subject: [PATCH 087/143] Remove poc text --- .../app/footer/terms-conditions/terms-conditions.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/footer/terms-conditions/terms-conditions.component.html b/frontend/src/app/footer/terms-conditions/terms-conditions.component.html index ece0266c3..2bc4be802 100644 --- a/frontend/src/app/footer/terms-conditions/terms-conditions.component.html +++ b/frontend/src/app/footer/terms-conditions/terms-conditions.component.html @@ -1,5 +1,5 @@

Terms and Conditions

-This is proof-of-concept, terms and conditions will appear here later +Terms and conditions will follow soon. From 84853af96f400ad90dfea0231fe64329ea2b9d5c Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 25 Apr 2022 10:34:43 +0200 Subject: [PATCH 088/143] Add seperate container configuration for sessions namespace --- helm/config/backend.yaml | 2 +- helm/values.yaml | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/helm/config/backend.yaml b/helm/config/backend.yaml index 359f66786..ef8ccb90f 100644 --- a/helm/config/backend.yaml +++ b/helm/config/backend.yaml @@ -16,7 +16,7 @@ operators: cluster: containers: - {{- toYaml .Values.cluster.containers | nindent 8 }} + {{- toYaml .Values.cluster.namespaces.sessions.containers | nindent 8 }} extensions: guacamole: diff --git a/helm/values.yaml b/helm/values.yaml index 611e1480d..9d68a65cf 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -211,4 +211,9 @@ cluster: # The following values are appended to each container service: - fqdn: capella.example.de \ No newline at end of file + fqdn: capella.example.de + + namespaces: + sessions: + containers: + # The following values are appended to each container in the sessions namespace \ No newline at end of file From b0e3a3ee9e8811359241f5d5347d0fc5292f08fa Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 25 Apr 2022 14:35:05 +0200 Subject: [PATCH 089/143] Allow seperate deployment of databases --- helm/README.md | 2 +- helm/config/backend.yaml | 2 +- .../backend/postgres.deployment.yaml | 2 +- helm/templates/backend/postgres.service.yaml | 2 +- helm/templates/backend/postgres.volume.yaml | 2 +- .../guacamole/guacamole.deployment.yaml | 2 +- .../guacamole/postgres.configmap.yaml | 2 +- .../guacamole/postgres.deployment.yaml | 2 +- .../templates/guacamole/postgres.service.yaml | 2 +- helm/templates/guacamole/postgres.volume.yaml | 2 +- helm/values.yaml | 22 ++++++++++++------- 11 files changed, 24 insertions(+), 18 deletions(-) diff --git a/helm/README.md b/helm/README.md index cfe18e0aa..2fe1b9d98 100644 --- a/helm/README.md +++ b/helm/README.md @@ -10,7 +10,7 @@ The following tools have to be installed and have to be present in your `PATH`: ## Setup databases ### Guacamole Database: -If you like to run your databases in the k8s cluster, please set `database.deploy: True` in the `options.yaml`. Everything is handled automatically then. +If you like to run your databases in the k8s cluster, please set `database.guacamole.deploy: True` in the `options.yaml`. Everything is handled automatically then. Guacamole supports the following database types: diff --git a/helm/config/backend.yaml b/helm/config/backend.yaml index ef8ccb90f..4e02b17f0 100644 --- a/helm/config/backend.yaml +++ b/helm/config/backend.yaml @@ -96,7 +96,7 @@ backups: database: - {{ if .Values.database.deploy }} + {{ if .Values.database.backend.deploy }} url: "postgresql://backend:{{ .Values.database.backend.internal.password }}@{{ .Release.Name }}-backend-postgres:5432/backend" {{ else }} url: "{{ .Values.database.backend.external.uri }}" diff --git a/helm/templates/backend/postgres.deployment.yaml b/helm/templates/backend/postgres.deployment.yaml index 41410f75e..3ce538c9b 100644 --- a/helm/templates/backend/postgres.deployment.yaml +++ b/helm/templates/backend/postgres.deployment.yaml @@ -1,4 +1,4 @@ -{{ if .Values.database.deploy }} +{{ if .Values.database.backend.deploy }} apiVersion: apps/v1 kind: Deployment metadata: diff --git a/helm/templates/backend/postgres.service.yaml b/helm/templates/backend/postgres.service.yaml index 2042976db..6857a2d46 100644 --- a/helm/templates/backend/postgres.service.yaml +++ b/helm/templates/backend/postgres.service.yaml @@ -1,4 +1,4 @@ -{{ if .Values.database.deploy }} +{{ if .Values.database.backend.deploy }} apiVersion: v1 kind: Service metadata: diff --git a/helm/templates/backend/postgres.volume.yaml b/helm/templates/backend/postgres.volume.yaml index 8a3e82689..045b5ce2d 100644 --- a/helm/templates/backend/postgres.volume.yaml +++ b/helm/templates/backend/postgres.volume.yaml @@ -1,4 +1,4 @@ -{{ if .Values.database.deploy }} +{{ if .Values.database.backend.deploy }} kind: PersistentVolumeClaim apiVersion: v1 metadata: diff --git a/helm/templates/guacamole/guacamole.deployment.yaml b/helm/templates/guacamole/guacamole.deployment.yaml index bb778904a..9480a8009 100644 --- a/helm/templates/guacamole/guacamole.deployment.yaml +++ b/helm/templates/guacamole/guacamole.deployment.yaml @@ -20,7 +20,7 @@ spec: env: - name: GUACD_HOSTNAME value: {{ .Release.Name }}-guacamole-guacd - {{ if .Values.database.deploy }} + {{ if .Values.database.guacamole.deploy }} - name: POSTGRES_DATABASE value: "guacamole" - name: POSTGRES_HOSTNAME diff --git a/helm/templates/guacamole/postgres.configmap.yaml b/helm/templates/guacamole/postgres.configmap.yaml index c05da2c3f..f25f6b67c 100644 --- a/helm/templates/guacamole/postgres.configmap.yaml +++ b/helm/templates/guacamole/postgres.configmap.yaml @@ -1,5 +1,5 @@ -{{ if .Values.database.deploy }} +{{ if .Values.database.guacamole.deploy }} apiVersion: v1 kind: ConfigMap metadata: diff --git a/helm/templates/guacamole/postgres.deployment.yaml b/helm/templates/guacamole/postgres.deployment.yaml index e604f859a..b7865f0e2 100644 --- a/helm/templates/guacamole/postgres.deployment.yaml +++ b/helm/templates/guacamole/postgres.deployment.yaml @@ -1,4 +1,4 @@ -{{ if .Values.database.deploy }} +{{ if .Values.database.guacamole.deploy }} apiVersion: apps/v1 kind: Deployment metadata: diff --git a/helm/templates/guacamole/postgres.service.yaml b/helm/templates/guacamole/postgres.service.yaml index 315a120be..103a59a9e 100644 --- a/helm/templates/guacamole/postgres.service.yaml +++ b/helm/templates/guacamole/postgres.service.yaml @@ -1,4 +1,4 @@ -{{ if .Values.database.deploy }} +{{ if .Values.database.guacamole.deploy }} apiVersion: v1 kind: Service metadata: diff --git a/helm/templates/guacamole/postgres.volume.yaml b/helm/templates/guacamole/postgres.volume.yaml index 8330d2e38..fa797328b 100644 --- a/helm/templates/guacamole/postgres.volume.yaml +++ b/helm/templates/guacamole/postgres.volume.yaml @@ -1,4 +1,4 @@ -{{ if .Values.database.deploy }} +{{ if .Values.database.guacamole.deploy }} kind: PersistentVolumeClaim apiVersion: v1 metadata: diff --git a/helm/values.yaml b/helm/values.yaml index 9d68a65cf..b5c2c77ff 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -41,20 +41,21 @@ general: scheme: http database: - # Define whether the database should also be deployed - # in the cluster or whether it already exists externally. - deploy: True - # Database Configuration for Guacamole guacamole: + + # Define whether the database should also be deployed + # in the cluster or whether it already exists externally. + deploy: False + internal: - ###### IF database.deploy == True ###### + ###### IF database.guacamole.deploy == True ###### # Admin password of the database password: secret external: - ###### IF database.deploy == False ###### + ###### IF database.guacamole.deploy == False ###### # Select type of external database # Possible values: MYSQL | POSTGRES @@ -74,18 +75,23 @@ database: # Database Configuration for the T4C Manager backend: + + # Define whether the database should also be deployed + # in the cluster or whether it already exists externally. + deploy: False + # Username of an initial admin user # Is only set if the database is empty! initialAdmin: me@example.com internal: - ###### IF database.deploy == True ###### + ###### IF database.backend.deploy == True ###### # Admin password of the database password: secret external: - ###### IF database.deploy == False ###### + ###### IF database.backend.deploy == False ###### # Provide URI to the datebase in the format: postgresql://user:password@url:port/db_name uri: postgresql://user:password@url:port/db_name From eb1d77012b14df166a03a3bb5e176641457faa98 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 25 Apr 2022 16:25:59 +0200 Subject: [PATCH 090/143] Add timeout for database --- backend/t4cclient/core/database/__main__.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/backend/t4cclient/core/database/__main__.py b/backend/t4cclient/core/database/__main__.py index a4f56efed..70ca68631 100644 --- a/backend/t4cclient/core/database/__main__.py +++ b/backend/t4cclient/core/database/__main__.py @@ -12,7 +12,7 @@ from t4cclient.schemas.repositories.users import Role DATABASE_URL = config["database"]["url"] -engine = create_engine(DATABASE_URL) +engine = create_engine(DATABASE_URL, connect_args={"connect_timeout": 5}) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) LOGGER = logging.getLogger(__name__) @@ -28,7 +28,6 @@ def migrate_db(): alembic_cfg.set_main_option("sqlalchemy.url", DATABASE_URL) alembic_cfg.attributes["configure_logger"] = False - engine = create_engine(DATABASE_URL) conn = engine.connect() context = MigrationContext.configure(conn) From 57e41641d1b6dd1807195f153fb0f28593bd90f4 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 25 Apr 2022 17:20:01 +0200 Subject: [PATCH 091/143] Add intial startup time for backend --- helm/templates/backend/backend.deployment.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/helm/templates/backend/backend.deployment.yaml b/helm/templates/backend/backend.deployment.yaml index 77305cf3e..72877ecd9 100644 --- a/helm/templates/backend/backend.deployment.yaml +++ b/helm/templates/backend/backend.deployment.yaml @@ -32,6 +32,7 @@ spec: httpGet: path: /healthcheck port: http + initialDelaySeconds: 30 readinessProbe: httpGet: path: /healthcheck From 6e50dd31e2aa274c3a13d36f571318290176dccf Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 25 Apr 2022 17:49:22 +0200 Subject: [PATCH 092/143] Remove unused Depends calls Depends calls do only make sense with fastapi routes. They do not make sense for normal functions. I removed the Depends() calls end replaced it with type annoations --- .../core/authentication/database/__init__.py | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/backend/t4cclient/core/authentication/database/__init__.py b/backend/t4cclient/core/authentication/database/__init__.py index b7222f823..4ec8b3631 100644 --- a/backend/t4cclient/core/authentication/database/__init__.py +++ b/backend/t4cclient/core/authentication/database/__init__.py @@ -1,3 +1,4 @@ +import sqlalchemy.orm.session from fastapi import Depends, HTTPException from t4cclient.core.authentication.helper import get_username from t4cclient.core.authentication.jwt_bearer import JWTBearer @@ -21,11 +22,13 @@ def is_admin(token=Depends(JWTBearer()), db=Depends(get_db)) -> bool: def verify_repository_role( repository: str, + token: JWTBearer, + db: sqlalchemy.orm.session.Session, allowed_roles=["user", "manager", "administrator"], - token=Depends(JWTBearer()), - db=Depends(get_db), ): - if not check_repository_role(repository, allowed_roles, token, db): + if not check_repository_role( + repository=repository, allowed_roles=allowed_roles, token=token, db=db + ): raise HTTPException( status_code=403, detail=f"One of the roles '{allowed_roles}' in the repository '{repository}' is required.", @@ -34,9 +37,9 @@ def verify_repository_role( def check_repository_role( repository: str, + token: JWTBearer, + db: sqlalchemy.orm.session.Session, allowed_roles=["user", "manager", "administrator"], - token=Depends(JWTBearer()), - db=Depends(get_db), ) -> bool: user = get_user(db=db, username=get_username(token)) @@ -64,8 +67,8 @@ def check_username_not_admin(username: str, db): def verify_write_permission( repository: str, - token=Depends(JWTBearer()), - db=Depends(get_db), + token: JWTBearer, + db: sqlalchemy.orm.session.Session, ): if not check_write_permission(repository, token, db): raise HTTPException( @@ -76,8 +79,8 @@ def verify_write_permission( def check_write_permission( repository: str, - token=Depends(JWTBearer()), - db=Depends(get_db), + token: JWTBearer, + db: sqlalchemy.orm.session.Session, ) -> bool: user = repository_users.get_user_of_repository(db, repository, get_username(token)) @@ -89,7 +92,7 @@ def check_write_permission( def check_username_not_in_repository( repository: str, username: str, - db=Depends(get_db), + db: sqlalchemy.orm.session.Session, ): user = repository_users.get_user_of_repository(db, repository, username) if user: From 299cfbd25130bab6571809ca89af8a9c718f1137 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 25 Apr 2022 18:06:25 +0200 Subject: [PATCH 093/143] Add .angular to gitignore --- frontend/.gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frontend/.gitignore b/frontend/.gitignore index 9cfa35f46..a09fbf764 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -45,4 +45,6 @@ testem.log Thumbs.db /src/environments/environment.prod.ts -/src/environments/environment.dev.ts \ No newline at end of file +/src/environments/environment.dev.ts + +.angular \ No newline at end of file From 59091d17338bd0e8624a34b2e454bde6df554c40 Mon Sep 17 00:00:00 2001 From: henrik997 Date: Tue, 26 Apr 2022 15:10:34 +0200 Subject: [PATCH 094/143] backend: remove unused comments and relocate import --- backend/t4cclient/routes/repositories/users.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/backend/t4cclient/routes/repositories/users.py b/backend/t4cclient/routes/repositories/users.py index 9548093d0..362455f6b 100644 --- a/backend/t4cclient/routes/repositories/users.py +++ b/backend/t4cclient/routes/repositories/users.py @@ -1,16 +1,15 @@ import typing as t -# from backend.t4cclient.core.authentication.database import check_username_exists import t4cclient.extensions.modelsources.t4c.connection as t4c_manager import t4cclient.schemas.repositories as schema_repositories from fastapi import APIRouter, Depends, HTTPException from requests import HTTPError, Session from t4cclient.core.authentication.database import ( check_username_not_admin, + check_username_not_in_repository, is_admin, verify_repository_role, verify_write_permission, - check_username_not_in_repository, ) from t4cclient.core.authentication.helper import get_username from t4cclient.core.authentication.jwt_bearer import JWTBearer From 49faaa4638a1f7d585607c53c3624d95ee1482e9 Mon Sep 17 00:00:00 2001 From: Jamil RAICHOUNI Date: Wed, 27 Apr 2022 15:23:58 +0200 Subject: [PATCH 095/143] Make clear that one needs to download the LTS version of Node.js from today. Node v18 does not work. --- frontend/README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/frontend/README.md b/frontend/README.md index 0c25983e6..b052f2ef2 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -1,8 +1,17 @@ # Frontend T4C Manager +## Requirements + +You need to install + +- [Node.js 16.15.0 LTS](https://nodejs.org/en/) +- [Angular CLI](https://angular.io/cli) + ## Development -Run +Change into the `frontend` directory and install all packages via `npm install`. + +Run ``` ng serve --open ``` From 1bc444083d9688c918962e4416bd6fc87250ee9b Mon Sep 17 00:00:00 2001 From: Jamil RAICHOUNI Date: Wed, 27 Apr 2022 15:34:10 +0200 Subject: [PATCH 096/143] Consider current year in copyright note --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ddb704af0..35bf8b398 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ A web platform for collaboration on Capella (MBSE) projects -**Copyright 2021 DB Netz AG, licensed under Apache 2.0 License (see full text in LICENSE file)** +**Copyright 2021, 2022 DB Netz AG, licensed under Apache 2.0 License (see full text in LICENSE file)** Turn your local Capella experience into a browser-based collaboration platform for model-based projects. Designed to enable co-working across multiple organizations. Here are some of the key features: From 1772c49524fc8e95ed3029da75cb2fa351d81bb3 Mon Sep 17 00:00:00 2001 From: Henrik Date: Wed, 27 Apr 2022 18:23:54 +0200 Subject: [PATCH 097/143] backend: make clear that a venv is needed --- backend/README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/backend/README.md b/backend/README.md index 85afc65e9..54a97bc93 100644 --- a/backend/README.md +++ b/backend/README.md @@ -2,6 +2,20 @@ Preparation =============== +1) Change into the `backend` directory. +1) Create a virtual environment: + ``` + python -m venv .venv39 + ``` +1) Activate it: + On Windows via: + ``` + .venv39/Scripts/activate + ``` + On Linux/MacOS: + ``` + source .venv39/bin/activate + ``` 1) Install required packages: ``` pip install . From 18efb404ec85a3ab28b7d73ba3d92262da38977f Mon Sep 17 00:00:00 2001 From: Jamil RAICHOUNI Date: Thu, 28 Apr 2022 06:46:45 +0200 Subject: [PATCH 098/143] Fix spelling --- capella-dockerimages | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/capella-dockerimages b/capella-dockerimages index 2eb365940..557a69d78 160000 --- a/capella-dockerimages +++ b/capella-dockerimages @@ -1 +1 @@ -Subproject commit 2eb365940cf4781de83c53ff8d89a04864f6261c +Subproject commit 557a69d782499e918a1215033bfc9aa5da551acb From 8d27f13aec3153d7cb41aae77d011f5e0776ecbc Mon Sep 17 00:00:00 2001 From: Moritz Weber Date: Fri, 29 Apr 2022 10:39:35 +0200 Subject: [PATCH 099/143] Update values.yaml Deploy databases in the default deployment --- helm/values.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/helm/values.yaml b/helm/values.yaml index b5c2c77ff..afc7c3f43 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -46,7 +46,7 @@ database: # Define whether the database should also be deployed # in the cluster or whether it already exists externally. - deploy: False + deploy: True internal: ###### IF database.guacamole.deploy == True ###### @@ -78,7 +78,7 @@ database: # Define whether the database should also be deployed # in the cluster or whether it already exists externally. - deploy: False + deploy: True # Username of an initial admin user # Is only set if the database is empty! @@ -222,4 +222,4 @@ cluster: namespaces: sessions: containers: - # The following values are appended to each container in the sessions namespace \ No newline at end of file + # The following values are appended to each container in the sessions namespace From 62e1ee9b703f8e472e3801a43863e4c3b326d168 Mon Sep 17 00:00:00 2001 From: henrik997 Date: Fri, 29 Apr 2022 11:32:02 +0200 Subject: [PATCH 100/143] make makefiles windows compatible --- Makefile | 25 +++++++++++++------------ backend/Makefile | 18 +++++++++++------- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/Makefile b/Makefile index 6a3ca894c..bc86858d2 100644 --- a/Makefile +++ b/Makefile @@ -27,20 +27,20 @@ capella: docker build -t capella/remote -t $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/client/remote capella-dockerimages/remote docker push $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/client/remote -t4c-client: +t4c-client: docker build -t t4c/client/base capella-dockerimages/t4c -readonly: +readonly: docker build -t capella/ease --build-arg BASE_IMAGE=capella/base --build-arg BUILD_TYPE=online capella-dockerimages/ease docker build -t capella/ease/remote --build-arg BASE_IMAGE=capella/ease capella-dockerimages/remote docker build -t $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/capella/readonly --build-arg BASE_IMAGE=capella/ease/remote capella-dockerimages/readonly docker push $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/capella/readonly -ease: +ease: docker build -t $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/client/ease --build-arg BASE_IMAGE=t4c/client/base --build-arg BUILD_TYPE=online capella-dockerimages/ease docker push $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/client/ease -mock: +mock: docker build -t t4c/server/mock -t $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/server/mock mocks/t4c-server docker push $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/server/mock @@ -54,7 +54,7 @@ deploy: backend frontend capella mock helm-deploy # Deploy with full T4C support: deploy-t4c: backend frontend capella t4c-client readonly-ease mock helm-deploy -helm-deploy: +helm-deploy: k3d cluster list $(CLUSTER_NAME) 2>&- || $(MAKE) create-cluster kubectl create namespace t4c-sessions || true helm upgrade --install \ @@ -79,7 +79,7 @@ helm-cleanup: --namespace $(NAMESPACE) \ $(RELEASE) -clear-backend-db: +clear-backend-db: kubectl delete deployment -n t4c-manager $(RELEASE)-backend-postgres kubectl delete pvc -n t4c-manager $(RELEASE)-volume-backend-postgres $(MAKE) helm-deploy @@ -87,7 +87,7 @@ clear-backend-db: rollout: backend frontend $(MAKE) .rollout -.rollout: +.rollout: kubectl --context k3d-$(CLUSTER_NAME) rollout restart deployment -n $(NAMESPACE) $(RELEASE)-backend kubectl --context k3d-$(CLUSTER_NAME) rollout restart deployment -n $(NAMESPACE) $(RELEASE)-frontend @@ -108,6 +108,7 @@ delete-cluster: rm -f .provision-guacamole .provision-backend .provision-guacamole: + export MSYS_NO_PATHCONV=1; \ kubectl exec --namespace $(NAMESPACE) $$(kubectl get pod --namespace $(NAMESPACE) -l id=$(RELEASE)-deployment-guacamole-guacamole --no-headers | cut -f1 -d' ') -- /opt/guacamole/bin/initdb.sh --postgres | \ kubectl exec -ti --namespace $(NAMESPACE) $$(kubectl get pod --namespace $(NAMESPACE) -l id=$(RELEASE)-deployment-guacamole-postgres --no-headers | cut -f1 -d' ') -- psql -U guacamole guacamole && \ touch .provision-guacamole @@ -120,15 +121,15 @@ delete-cluster: # Execute with `make -j2 dev` dev: dev-frontend dev-backend - -dev-frontend: + +dev-frontend: $(MAKE) -C frontend dev -dev-backend: +dev-backend: $(MAKE) -C backend dev -dev-cleanup: +dev-cleanup: $(MAKE) -C backend cleanup -backend-logs: +backend-logs: kubectl logs -f -n $(NAMESPACE) -l id=$(RELEASE)-deployment-backend \ No newline at end of file diff --git a/backend/Makefile b/backend/Makefile index 61647a0a9..f545a82a4 100644 --- a/backend/Makefile +++ b/backend/Makefile @@ -1,7 +1,7 @@ DB_PORT = 5432 -VENV = .venv39/bin +VENV = .venv39 -database: +database: docker start capella-collab-postgres || \ docker run -d \ --name capella-collab-postgres \ @@ -11,13 +11,17 @@ database: -e POSTGRES_DB=dev \ postgres -app: +app: export MSYS_NO_PATHCONV=1; \ - export REQUESTS_CA_BUNDLE=$$(pwd)/../certs/localhost.crt; \ - $(VENV)/uvicorn t4cclient.__main__:app --reload + export OAUTHLIB_INSECURE_TRANSPORT=1; \ + if [ -d "$(VENV)/bin" ]; then \ + $(VENV)/bin/uvicorn t4cclient.__main__:app --reload; \ + else \ + $(VENV)/Scripts/uvicorn t4cclient.__main__:app --reload; \ + fi dev: database app - -cleanup: + +cleanup: docker stop capella-collab-postgres docker rm capella-collab-postgres \ No newline at end of file From 2cc8b3a5925197bbcfe10d4e3e4355da0bd2224d Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Thu, 21 Apr 2022 12:56:02 +0200 Subject: [PATCH 101/143] Do not use persistent volumes for local postgres databases --- helm/templates/backend/postgres.deployment.yaml | 4 ++++ helm/templates/backend/postgres.volume.yaml | 2 ++ helm/templates/guacamole/postgres.deployment.yaml | 4 ++++ helm/templates/guacamole/postgres.volume.yaml | 2 ++ 4 files changed, 12 insertions(+) diff --git a/helm/templates/backend/postgres.deployment.yaml b/helm/templates/backend/postgres.deployment.yaml index 3ce538c9b..af1da0093 100644 --- a/helm/templates/backend/postgres.deployment.yaml +++ b/helm/templates/backend/postgres.deployment.yaml @@ -17,10 +17,12 @@ spec: labels: id: {{ .Release.Name }}-deployment-backend-postgres spec: + {{ if ne .Values.target "local" }} volumes: - name: {{ .Release.Name }}-data persistentVolumeClaim: claimName: {{ .Release.Name }}-volume-backend-postgres + {{ end }} containers: - name: {{ .Release.Name }}-backend-postgres image: {{ .Values.docker.registry.external }}/postgres:14.1 @@ -54,9 +56,11 @@ spec: limits: memory: "1Gi" cpu: "1" + {{ if ne .Values.target "local" }} volumeMounts: - name: {{ .Release.Name }}-data mountPath: /var/lib/postgresql/data + {{ end }} {{ if .Values.cluster.container }} {{- toYaml .Values.cluster.containers | nindent 10 }} {{ end }} diff --git a/helm/templates/backend/postgres.volume.yaml b/helm/templates/backend/postgres.volume.yaml index 045b5ce2d..90fd60e70 100644 --- a/helm/templates/backend/postgres.volume.yaml +++ b/helm/templates/backend/postgres.volume.yaml @@ -1,4 +1,5 @@ {{ if .Values.database.backend.deploy }} +{{ if ne .Values.target "local" }} kind: PersistentVolumeClaim apiVersion: v1 metadata: @@ -11,3 +12,4 @@ spec: storage: 1Gi storageClassName: {{ .Values.database.backend.internal.storageClassName }} {{ end }} +{{ end }} \ No newline at end of file diff --git a/helm/templates/guacamole/postgres.deployment.yaml b/helm/templates/guacamole/postgres.deployment.yaml index b7865f0e2..6ec90e5fd 100644 --- a/helm/templates/guacamole/postgres.deployment.yaml +++ b/helm/templates/guacamole/postgres.deployment.yaml @@ -18,9 +18,11 @@ spec: id: {{ .Release.Name }}-deployment-guacamole-postgres spec: volumes: + {{ if ne .Values.target "local" }} - name: {{ .Release.Name }}-data persistentVolumeClaim: claimName: {{ .Release.Name }}-volume-guacamole-postgres + {{ end }} - name: {{ .Release.Name }}-initsql configMap: name: {{ .Release.Name }}-configmap-guacamole-postgres @@ -62,8 +64,10 @@ spec: memory: "1Gi" cpu: "1" volumeMounts: + {{ if ne .Values.target "local" }} - name: {{ .Release.Name }}-data mountPath: /var/lib/postgresql/data + {{ end }} - name: {{ .Release.Name }}-initsql mountPath: /docker-entrypoint-initdb.d {{ if .Values.cluster.container }} diff --git a/helm/templates/guacamole/postgres.volume.yaml b/helm/templates/guacamole/postgres.volume.yaml index fa797328b..e3bb248d8 100644 --- a/helm/templates/guacamole/postgres.volume.yaml +++ b/helm/templates/guacamole/postgres.volume.yaml @@ -1,4 +1,5 @@ {{ if .Values.database.guacamole.deploy }} +{{ if ne .Values.target "local" }} kind: PersistentVolumeClaim apiVersion: v1 metadata: @@ -11,3 +12,4 @@ spec: storage: 1Gi storageClassName: {{ .Values.database.guacamole.internal.storageClassName }} {{ end }} +{{ end }} \ No newline at end of file From 3b94cf376f4472b25085d5bf4a4da97cffc954a0 Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Thu, 21 Apr 2022 17:21:53 +0200 Subject: [PATCH 102/143] Deploy oauth mock --- .gitignore | 6 ++- Makefile | 14 +++--- helm/templates/mock/oauth.configmap.yaml | 17 ++++++++ helm/templates/mock/oauth.deployment.yaml | 53 +++++++++++++++++++++++ helm/templates/mock/oauth.service.yaml | 17 ++++++++ helm/values.yaml | 11 ++--- mocks/oauth/Makefile | 4 +- 7 files changed, 108 insertions(+), 14 deletions(-) create mode 100644 helm/templates/mock/oauth.configmap.yaml create mode 100644 helm/templates/mock/oauth.deployment.yaml create mode 100644 helm/templates/mock/oauth.service.yaml diff --git a/.gitignore b/.gitignore index 61b78bebc..7432e8373 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,8 @@ /local .mypy_cache deployments/* -certs/* \ No newline at end of file +certs/* +/helm/config/conf.json +/helm/config/localhost.crt +/helm/config/localhost.key +/helm/config/localhost.p12 \ No newline at end of file diff --git a/Makefile b/Makefile index 6a3ca894c..60102325c 100644 --- a/Makefile +++ b/Makefile @@ -47,9 +47,15 @@ mock: docker build -t t4c/licence/mock -t $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/licence/mock mocks/licence-server docker push $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/licence/mock +oauth-mock: helm/config/localhost.p12 + cp mocks/oauth/conf.json helm/config + +helm/config/localhost.p12: + $(MAKE) -C mocks/oauth CERTS_DIR=../../helm/config/ + capella-dockerimages: capella t4c-client readonly ease -deploy: backend frontend capella mock helm-deploy +deploy: oauth-mock backend frontend capella mock helm-deploy # Deploy with full T4C support: deploy-t4c: backend frontend capella t4c-client readonly-ease mock helm-deploy @@ -73,12 +79,6 @@ helm-deploy: $(RELEASE) ./helm $(MAKE) .rollout .provision-guacamole .provision-backend -helm-cleanup: - helm uninstall \ - --kube-context k3d-$(CLUSTER_NAME) \ - --namespace $(NAMESPACE) \ - $(RELEASE) - clear-backend-db: kubectl delete deployment -n t4c-manager $(RELEASE)-backend-postgres kubectl delete pvc -n t4c-manager $(RELEASE)-volume-backend-postgres diff --git a/helm/templates/mock/oauth.configmap.yaml b/helm/templates/mock/oauth.configmap.yaml new file mode 100644 index 000000000..51c55f0d7 --- /dev/null +++ b/helm/templates/mock/oauth.configmap.yaml @@ -0,0 +1,17 @@ +{{ if eq .Values.target "local" }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Release.Name }}-oauth-mock + namespace: {{ .Release.Namespace }} + labels: + id: {{ .Release.Name }}-configmap-oauth-mock +data: + conf.json: |- + {{ .Files.Get "config/conf.json" | nindent 4 }} + +binaryData: + localhost.p12: |- + {{ .Files.Get "config/localhost.p12" | b64enc | nindent 4 }} + +{{ end }} \ No newline at end of file diff --git a/helm/templates/mock/oauth.deployment.yaml b/helm/templates/mock/oauth.deployment.yaml new file mode 100644 index 000000000..13689abad --- /dev/null +++ b/helm/templates/mock/oauth.deployment.yaml @@ -0,0 +1,53 @@ +{{ if eq .Values.target "local" }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ .Release.Name }}-oauth-mock + labels: + id: {{ .Release.Name }}-deployment-oauth-mock +spec: + replicas: 1 + selector: + matchLabels: + id: {{ .Release.Name }}-deployment-oauth-mock + template: + metadata: + labels: + id: {{ .Release.Name }}-deployment-oauth-mock + spec: + volumes: + - name: {{ .Release.Name }}-oauth-mock + configMap: + name: {{ .Release.Name }}-oauth-mock + containers: + - name: {{ .Release.Name }}-oauth-mock + image: ghcr.io/navikt/mock-oauth2-server:0.4.4 + ports: + - name: https + containerPort: 8080 + protocol: TCP + # livenessProbe: + # httpGet: + # path: /isalive + # port: https + # readinessProbe: + # httpGet: + # path: /isalive + # port: https + volumeMounts: + - name: {{ .Release.Name }}-oauth-mock + mountPath: /opt + env: + - name: JSON_CONFIG_PATH + value: /opt/conf.json + resources: + limits: + cpu: "0.1" + memory: 200Mi + requests: + cpu: "0.1" + memory: 20Mi + {{ if .Values.cluster.container }} + {{- toYaml .Values.cluster.containers | nindent 10 }} + {{ end }} +{{ end }} diff --git a/helm/templates/mock/oauth.service.yaml b/helm/templates/mock/oauth.service.yaml new file mode 100644 index 000000000..3eed2d86e --- /dev/null +++ b/helm/templates/mock/oauth.service.yaml @@ -0,0 +1,17 @@ +{{ if eq .Values.target "local" }} +apiVersion: v1 +kind: Service +metadata: + name: {{ .Release.Name }}-oauth-mock + labels: + id: {{ .Release.Name }}-service-oauth-mock +spec: + type: ClusterIP + selector: + id: {{ .Release.Name }}-deployment-oauth-mock + ports: + - port: 8080 + targetPort: https + protocol: TCP + name: https +{{ end }} diff --git a/helm/values.yaml b/helm/values.yaml index b5c2c77ff..a968be2ec 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -105,17 +105,18 @@ backend: authentication: provider: oauth # oauth | azure jwt: - usernameClaim: sub + usernameClaim: sub # azure: preferred_username oauth: # Only required when using provider oauth endpoints: # Endpoint that issues JWT Tokens - tokenIssuance: https://localhost:8080/mock/oauth/default/token + tokenIssuance: na # Endpoint that authorizes the User - authorization: https://localhost:8080/mock/oauth/default/authorize - # wellKnown Endpoint - wellKnown: https://localhost:8081/mock/oauth/default/.well-known/openid-configuration + authorization: na + # Or, define a wellKnown Endpoint and read token/auth urls from there: + wellKnown: https://dev-t4c-manager-oauth-mock:8080/default/.well-known/openid-configuration + audience: default diff --git a/mocks/oauth/Makefile b/mocks/oauth/Makefile index f467b28da..fc92aed14 100644 --- a/mocks/oauth/Makefile +++ b/mocks/oauth/Makefile @@ -1,6 +1,8 @@ CERTS_DIR = ../../certs/ -ssl: +ssl: $(CERTS_DIR)localhost.p12 + +$(CERTS_DIR)localhost.p12: export MSYS_NO_PATHCONV=1; \ openssl req -x509 -out $(CERTS_DIR)localhost.crt -keyout $(CERTS_DIR)localhost.key \ -newkey rsa:2048 -nodes -sha256 \ From 615eae6a88eb62f2cf0c00f6a7b7117aaa49c3f2 Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Fri, 22 Apr 2022 11:40:46 +0200 Subject: [PATCH 103/143] Make backend and oauth mock interact --- .gitignore | 6 +++--- Makefile | 12 ++++++++---- helm/templates/backend/backend.configmap.yaml | 6 +++++- helm/templates/backend/backend.deployment.yaml | 5 +++++ helm/templates/mock/oauth.configmap.yaml | 2 +- helm/templates/mock/oauth.deployment.yaml | 2 ++ helm/templates/routing/nginx.ingress.yaml | 7 +++++++ helm/values.yaml | 1 - 8 files changed, 31 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index 7432e8373..3bc74a236 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,6 @@ deployments/* certs/* /helm/config/conf.json -/helm/config/localhost.crt -/helm/config/localhost.key -/helm/config/localhost.p12 \ No newline at end of file +/helm/config/oauth.crt +/helm/config/oauth.key +/helm/config/oauth.p12 \ No newline at end of file diff --git a/Makefile b/Makefile index 60102325c..1ae05069a 100644 --- a/Makefile +++ b/Makefile @@ -47,12 +47,16 @@ mock: docker build -t t4c/licence/mock -t $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/licence/mock mocks/licence-server docker push $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/licence/mock -oauth-mock: helm/config/localhost.p12 +oauth-mock: helm/config/oauth.p12 cp mocks/oauth/conf.json helm/config -helm/config/localhost.p12: - $(MAKE) -C mocks/oauth CERTS_DIR=../../helm/config/ - +helm/config/oauth.p12: Makefile + openssl req -x509 -out helm/config/oauth.crt -keyout helm/config/oauth.key \ + -newkey rsa:2048 -nodes -sha256 \ + -subj '/CN=$(RELEASE)-oauth-mock' \ + -addext "subjectAltName = DNS:localhost, DNS:$(RELEASE)-oauth-mock" + openssl pkcs12 -export -in helm/config/oauth.crt -inkey helm/config/oauth.key -out helm/config/oauth.p12 -passout "pass:" + capella-dockerimages: capella t4c-client readonly ease deploy: oauth-mock backend frontend capella mock helm-deploy diff --git a/helm/templates/backend/backend.configmap.yaml b/helm/templates/backend/backend.configmap.yaml index 23cbb0462..4d052023e 100644 --- a/helm/templates/backend/backend.configmap.yaml +++ b/helm/templates/backend/backend.configmap.yaml @@ -7,4 +7,8 @@ metadata: id: {{ .Release.Name }}-configmap-backend data: config.yaml: | - {{- tpl (.Files.Get "config/backend.yaml") . | nindent 4 }} \ No newline at end of file + {{- tpl (.Files.Get "config/backend.yaml") . | nindent 4 }} + {{ if eq .Values.target "local" }} + oauth.crt: |- + {{ .Files.Get "config/oauth.crt" | nindent 4 }} + {{ end }} \ No newline at end of file diff --git a/helm/templates/backend/backend.deployment.yaml b/helm/templates/backend/backend.deployment.yaml index 72877ecd9..3c0ee87d1 100644 --- a/helm/templates/backend/backend.deployment.yaml +++ b/helm/templates/backend/backend.deployment.yaml @@ -28,6 +28,11 @@ spec: - name: http containerPort: 8000 protocol: TCP + {{ if eq .Values.target "local" }} + env: + - name: REQUESTS_CA_BUNDLE + value: /etc/capellacollab/oauth.crt + {{ end }} livenessProbe: httpGet: path: /healthcheck diff --git a/helm/templates/mock/oauth.configmap.yaml b/helm/templates/mock/oauth.configmap.yaml index 51c55f0d7..8e325c365 100644 --- a/helm/templates/mock/oauth.configmap.yaml +++ b/helm/templates/mock/oauth.configmap.yaml @@ -12,6 +12,6 @@ data: binaryData: localhost.p12: |- - {{ .Files.Get "config/localhost.p12" | b64enc | nindent 4 }} + {{ .Files.Get "config/oauth.p12" | b64enc | nindent 4 }} {{ end }} \ No newline at end of file diff --git a/helm/templates/mock/oauth.deployment.yaml b/helm/templates/mock/oauth.deployment.yaml index 13689abad..32f7ebbc5 100644 --- a/helm/templates/mock/oauth.deployment.yaml +++ b/helm/templates/mock/oauth.deployment.yaml @@ -30,10 +30,12 @@ spec: # httpGet: # path: /isalive # port: https + # scheme: HTTPS # readinessProbe: # httpGet: # path: /isalive # port: https + # scheme: HTTPS volumeMounts: - name: {{ .Release.Name }}-oauth-mock mountPath: /opt diff --git a/helm/templates/routing/nginx.ingress.yaml b/helm/templates/routing/nginx.ingress.yaml index 5aec47525..22cb3d786 100644 --- a/helm/templates/routing/nginx.ingress.yaml +++ b/helm/templates/routing/nginx.ingress.yaml @@ -39,6 +39,13 @@ spec: port: number: 8080 {{ if eq .Values.target "local" }} + - path: /mock/oauth + pathType: Prefix + backend: + service: + name: {{ .Release.Name }}-oauth-mock + port: + number: 8080 - path: /mock pathType: Prefix backend: diff --git a/helm/values.yaml b/helm/values.yaml index a968be2ec..706b7918a 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -117,7 +117,6 @@ backend: # Or, define a wellKnown Endpoint and read token/auth urls from there: wellKnown: https://dev-t4c-manager-oauth-mock:8080/default/.well-known/openid-configuration - audience: default publicKey: | From ac1b096e753d85717beb436217eab42ca90bae31 Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Fri, 22 Apr 2022 12:44:41 +0200 Subject: [PATCH 104/143] Expose oauth mock service --- helm/templates/mock/oauth.deployment.yaml | 26 +++++++++++------------ helm/templates/routing/nginx.ingress.yaml | 2 +- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/helm/templates/mock/oauth.deployment.yaml b/helm/templates/mock/oauth.deployment.yaml index 32f7ebbc5..271c35d1f 100644 --- a/helm/templates/mock/oauth.deployment.yaml +++ b/helm/templates/mock/oauth.deployment.yaml @@ -26,16 +26,14 @@ spec: - name: https containerPort: 8080 protocol: TCP - # livenessProbe: - # httpGet: - # path: /isalive - # port: https - # scheme: HTTPS - # readinessProbe: - # httpGet: - # path: /isalive - # port: https - # scheme: HTTPS + livenessProbe: + httpGet: + path: /isalive + port: https + scheme: HTTPS + readinessProbe: + tcpSocket: + port: 8080 volumeMounts: - name: {{ .Release.Name }}-oauth-mock mountPath: /opt @@ -44,11 +42,11 @@ spec: value: /opt/conf.json resources: limits: - cpu: "0.1" - memory: 200Mi + cpu: "0.5" + memory: 100Mi requests: - cpu: "0.1" - memory: 20Mi + cpu: "0.5" + memory: 40Mi {{ if .Values.cluster.container }} {{- toYaml .Values.cluster.containers | nindent 10 }} {{ end }} diff --git a/helm/templates/routing/nginx.ingress.yaml b/helm/templates/routing/nginx.ingress.yaml index 22cb3d786..429ae2289 100644 --- a/helm/templates/routing/nginx.ingress.yaml +++ b/helm/templates/routing/nginx.ingress.yaml @@ -39,7 +39,7 @@ spec: port: number: 8080 {{ if eq .Values.target "local" }} - - path: /mock/oauth + - path: /default pathType: Prefix backend: service: From ffd9366f8be4d11d90a2ebd7c7db5f50380e87d0 Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Fri, 22 Apr 2022 13:22:45 +0200 Subject: [PATCH 105/143] Simplify cluster Add a proper name, and expose on port 8080 by default. In doing so, we avoid some port conflicts when providing (internal) urls. --- Makefile | 15 +++++++++------ backend/config/config_template.yaml | 8 ++++---- helm/values.yaml | 2 +- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index 1ae05069a..45620fe3b 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -CLUSTER_NAME = mycluster +CLUSTER_NAME = collab-cluster LOCAL_REGISTRY_NAME = localhost CLUSTER_REGISTRY_NAME = myregistry.localhost REGISTRY_PORT = 12345 @@ -75,7 +75,7 @@ helm-deploy: $$(test -f secrets.yaml && echo "--values secrets.yaml") \ --set docker.registry.internal=k3d-$(CLUSTER_REGISTRY_NAME):$(REGISTRY_PORT) \ --set database.backend.initialAdmin=$(MY_NAME) \ - --set general.port=8081 \ + --set general.port=8080 \ --set t4cServer.apis.usageStats="http://$(RELEASE)-licence-server-mock:80/mock" \ --set t4cServer.apis.restAPI="http://$(RELEASE)-t4c-server-mock:80/mock/api/v1.0" \ --wait --timeout 4m \ @@ -104,7 +104,7 @@ create-cluster: k3d registry list $(CLUSTER_REGISTRY_NAME) 2>&- || k3d registry create $(CLUSTER_REGISTRY_NAME) --port $(REGISTRY_PORT) k3d cluster list $(CLUSTER_NAME) 2>&- || k3d cluster create $(CLUSTER_NAME) \ --registry-use k3d-$(CLUSTER_REGISTRY_NAME):$(REGISTRY_PORT) \ - --port "8081:80@loadbalancer" + --port "8080:80@loadbalancer" kubectl cluster-info delete-cluster: @@ -117,10 +117,10 @@ delete-cluster: touch .provision-guacamole .provision-backend: - echo "insert into repository_user_association values ('$(MY_EMAIL)', 'default', 'WRITE', 'MANAGER');" | kubectl exec -ti --namespace $(NAMESPACE) $$(kubectl get pod --namespace $(NAMESPACE) -l id=$(RELEASE)-deployment-backend-postgres --no-headers | cut -f1 -d' ') -- psql -U backend backend && \ + echo "insert into repository_user_association values ('$(MY_EMAIL)', 'default', 'WRITE', 'MANAGER');" | kubectl exec --namespace $(NAMESPACE) $$(kubectl get pod --namespace $(NAMESPACE) -l id=$(RELEASE)-deployment-backend-postgres --no-headers | cut -f1 -d' ') -- psql -U backend backend && \ touch .provision-backend -.PHONY: backend frontend capella deploy undeploy create-cluster delete-cluster persistent-volume +.PHONY: backend frontend capella oauth-mock deploy undeploy create-cluster delete-cluster persistent-volume ns # Execute with `make -j2 dev` dev: dev-frontend dev-backend @@ -135,4 +135,7 @@ dev-cleanup: $(MAKE) -C backend cleanup backend-logs: - kubectl logs -f -n $(NAMESPACE) -l id=$(RELEASE)-deployment-backend \ No newline at end of file + kubectl logs -f -n $(NAMESPACE) -l id=$(RELEASE)-deployment-backend + +ns: + kubectl config set-context k3d-$(CLUSTER_NAME) --namespace=$(NAMESPACE) \ No newline at end of file diff --git a/backend/config/config_template.yaml b/backend/config/config_template.yaml index e044df66f..2b5ca5c5a 100644 --- a/backend/config/config_template.yaml +++ b/backend/config/config_template.yaml @@ -34,8 +34,8 @@ operators: extensions: guacamole: - baseURI: http://localhost:8081/guacamole - publicURI: http://localhost:8081/guacamole + baseURI: http://localhost:8080/guacamole + publicURI: http://localhost:8080/guacamole username: guacadmin password: guacadmin @@ -81,8 +81,8 @@ authentication: modelsources: t4c: - usageAPI: http://localhost:8081/mock - restAPI: http://localhost:8081/mock/api/v1.0 + usageAPI: http://localhost:8080/mock + restAPI: http://localhost:8080/mock/api/v1.0 username: sampleuser password: samplepassword diff --git a/helm/values.yaml b/helm/values.yaml index 706b7918a..814dd81f5 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -132,7 +132,7 @@ backend: # OAUTH2 Client Secret secret: tbd - redirectURI: http://localhost:8081/oauth2/callback + redirectURI: http://localhost:8080/oauth2/callback azure: # Only required when using provider oauth From 7f71c9c54adc92b576b4e2b186019392344cedfe Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Fri, 22 Apr 2022 13:30:52 +0200 Subject: [PATCH 106/143] Use oauth mock over http For local (test) use only. --- .gitignore | 4 ---- Makefile | 10 -------- helm/config/oauth.json | 24 +++++++++++++++++++ .../templates/backend/backend.deployment.yaml | 2 ++ helm/templates/mock/oauth.configmap.yaml | 8 ++----- helm/templates/mock/oauth.deployment.yaml | 7 +++--- helm/templates/mock/oauth.service.yaml | 4 ++-- helm/values.yaml | 2 +- 8 files changed, 34 insertions(+), 27 deletions(-) create mode 100644 helm/config/oauth.json diff --git a/.gitignore b/.gitignore index 3bc74a236..7740b8f56 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,3 @@ .mypy_cache deployments/* certs/* -/helm/config/conf.json -/helm/config/oauth.crt -/helm/config/oauth.key -/helm/config/oauth.p12 \ No newline at end of file diff --git a/Makefile b/Makefile index 45620fe3b..353526c60 100644 --- a/Makefile +++ b/Makefile @@ -47,16 +47,6 @@ mock: docker build -t t4c/licence/mock -t $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/licence/mock mocks/licence-server docker push $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/licence/mock -oauth-mock: helm/config/oauth.p12 - cp mocks/oauth/conf.json helm/config - -helm/config/oauth.p12: Makefile - openssl req -x509 -out helm/config/oauth.crt -keyout helm/config/oauth.key \ - -newkey rsa:2048 -nodes -sha256 \ - -subj '/CN=$(RELEASE)-oauth-mock' \ - -addext "subjectAltName = DNS:localhost, DNS:$(RELEASE)-oauth-mock" - openssl pkcs12 -export -in helm/config/oauth.crt -inkey helm/config/oauth.key -out helm/config/oauth.p12 -passout "pass:" - capella-dockerimages: capella t4c-client readonly ease deploy: oauth-mock backend frontend capella mock helm-deploy diff --git a/helm/config/oauth.json b/helm/config/oauth.json new file mode 100644 index 000000000..33c8ea93f --- /dev/null +++ b/helm/config/oauth.json @@ -0,0 +1,24 @@ +{ + "interactiveLogin": true, + "httpServer": { + "type": "NettyWrapper" + }, + "tokenCallbacks": [ + { + "issuerId": "issuer1", + "tokenExpiry": 120, + "requestMappings": [ + { + "requestParam": "scope", + "match": "openid", + "claims": { + "sub": "subByScope", + "aud": [ + "audByScope" + ] + } + } + ] + } + ] +} diff --git a/helm/templates/backend/backend.deployment.yaml b/helm/templates/backend/backend.deployment.yaml index 3c0ee87d1..6264220f8 100644 --- a/helm/templates/backend/backend.deployment.yaml +++ b/helm/templates/backend/backend.deployment.yaml @@ -32,6 +32,8 @@ spec: env: - name: REQUESTS_CA_BUNDLE value: /etc/capellacollab/oauth.crt + - name: OAUTHLIB_INSECURE_TRANSPORT + value: "1" {{ end }} livenessProbe: httpGet: diff --git a/helm/templates/mock/oauth.configmap.yaml b/helm/templates/mock/oauth.configmap.yaml index 8e325c365..73d782cb1 100644 --- a/helm/templates/mock/oauth.configmap.yaml +++ b/helm/templates/mock/oauth.configmap.yaml @@ -7,11 +7,7 @@ metadata: labels: id: {{ .Release.Name }}-configmap-oauth-mock data: - conf.json: |- - {{ .Files.Get "config/conf.json" | nindent 4 }} - -binaryData: - localhost.p12: |- - {{ .Files.Get "config/oauth.p12" | b64enc | nindent 4 }} + oauth.json: |- + {{ .Files.Get "config/oauth.json" | nindent 4 }} {{ end }} \ No newline at end of file diff --git a/helm/templates/mock/oauth.deployment.yaml b/helm/templates/mock/oauth.deployment.yaml index 271c35d1f..34ea72466 100644 --- a/helm/templates/mock/oauth.deployment.yaml +++ b/helm/templates/mock/oauth.deployment.yaml @@ -23,14 +23,13 @@ spec: - name: {{ .Release.Name }}-oauth-mock image: ghcr.io/navikt/mock-oauth2-server:0.4.4 ports: - - name: https + - name: http containerPort: 8080 protocol: TCP livenessProbe: httpGet: path: /isalive - port: https - scheme: HTTPS + port: http readinessProbe: tcpSocket: port: 8080 @@ -39,7 +38,7 @@ spec: mountPath: /opt env: - name: JSON_CONFIG_PATH - value: /opt/conf.json + value: /opt/oauth.json resources: limits: cpu: "0.5" diff --git a/helm/templates/mock/oauth.service.yaml b/helm/templates/mock/oauth.service.yaml index 3eed2d86e..a4f5f7f1f 100644 --- a/helm/templates/mock/oauth.service.yaml +++ b/helm/templates/mock/oauth.service.yaml @@ -11,7 +11,7 @@ spec: id: {{ .Release.Name }}-deployment-oauth-mock ports: - port: 8080 - targetPort: https + targetPort: http protocol: TCP - name: https + name: http {{ end }} diff --git a/helm/values.yaml b/helm/values.yaml index 814dd81f5..148a3139e 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -115,7 +115,7 @@ backend: # Endpoint that authorizes the User authorization: na # Or, define a wellKnown Endpoint and read token/auth urls from there: - wellKnown: https://dev-t4c-manager-oauth-mock:8080/default/.well-known/openid-configuration + wellKnown: http://dev-t4c-manager-oauth-mock:8080/default/.well-known/openid-configuration audience: default From 97af28d86dec8aaa7dc78c02c6f6b5a8fd2f07b7 Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Fri, 22 Apr 2022 14:24:05 +0200 Subject: [PATCH 107/143] Add local frontend config Works on the local cluster out of the box. --- Makefile | 5 +---- frontend/Dockerfile | 4 +++- frontend/angular.json | 15 +++++++++++++++ frontend/src/environments/environment.ts | 2 +- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 353526c60..07c28ae3f 100644 --- a/Makefile +++ b/Makefile @@ -18,7 +18,7 @@ backend: docker push $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/capella/collab/backend frontend: - docker build -t t4c/client/frontend -t $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/capella/collab/frontend frontend + docker build --build-arg CONFIGURATION=local -t t4c/client/frontend -t $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/capella/collab/frontend frontend docker push $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/capella/collab/frontend capella: @@ -79,9 +79,6 @@ clear-backend-db: $(MAKE) helm-deploy rollout: backend frontend - $(MAKE) .rollout - -.rollout: kubectl --context k3d-$(CLUSTER_NAME) rollout restart deployment -n $(NAMESPACE) $(RELEASE)-backend kubectl --context k3d-$(CLUSTER_NAME) rollout restart deployment -n $(NAMESPACE) $(RELEASE)-frontend diff --git a/frontend/Dockerfile b/frontend/Dockerfile index a94dc08c9..cceb456ca 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -1,10 +1,12 @@ ARG BASE_IMAGE=node:17 FROM $BASE_IMAGE as build +ARG CONFIGURATION=production + COPY ./ /work/ WORKDIR /work RUN npm install -RUN npm run build +RUN npm run build -- --configuration=${CONFIGURATION} FROM nginxinc/nginx-unprivileged:latest COPY nginx.conf /etc/nginx/nginx.conf diff --git a/frontend/angular.json b/frontend/angular.json index 1825f7171..8576b96e9 100644 --- a/frontend/angular.json +++ b/frontend/angular.json @@ -70,6 +70,21 @@ "with": "src/environments/environment.dev.ts" } ] + }, + "local": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "2mb", + "maximumError": "5mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" } }, "defaultConfiguration": "production" diff --git a/frontend/src/environments/environment.ts b/frontend/src/environments/environment.ts index 970abb3ea..1283d2c49 100644 --- a/frontend/src/environments/environment.ts +++ b/frontend/src/environments/environment.ts @@ -5,5 +5,5 @@ export const environment = { imprint: 'https://example.com/imprint', provider: 'PROVIDER', authentication: 'AUTHENTICATION_TYPE', - usernameAttribute: 'attribute', + usernameAttribute: 'sub', }; From 7cc486b9c9d5ee30017d7edac58a781e497704f7 Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Fri, 22 Apr 2022 14:50:55 +0200 Subject: [PATCH 108/143] Allow authorization endpoint to be overruled in backend --- .../t4cclient/core/authentication/provider/oauth/flow.py | 6 +++++- helm/values.yaml | 9 ++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/backend/t4cclient/core/authentication/provider/oauth/flow.py b/backend/t4cclient/core/authentication/provider/oauth/flow.py index 35caea669..436a3bfed 100644 --- a/backend/t4cclient/core/authentication/provider/oauth/flow.py +++ b/backend/t4cclient/core/authentication/provider/oauth/flow.py @@ -20,6 +20,7 @@ def get_auth_redirect_url() -> t.Dict[str, str]: read_well_known()["authorization_endpoint"], grant_type="authorization_code", ) + return {"auth_url": auth_url, "state": state} @@ -52,8 +53,11 @@ def read_well_known() -> dict[str, t.Any]: authorization_endpoint = resp["authorization_endpoint"] token_endpoint = resp["token_endpoint"] - else: + + if cfg["endpoints"]["authorization"]: authorization_endpoint = cfg["endpoints"]["authorization"] + + if cfg["endpoints"]["tokenIssuance"]: token_endpoint = cfg["endpoints"]["tokenIssuance"] return { diff --git a/helm/values.yaml b/helm/values.yaml index 148a3139e..ee37f2dc9 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -110,12 +110,11 @@ backend: oauth: # Only required when using provider oauth endpoints: - # Endpoint that issues JWT Tokens - tokenIssuance: na - # Endpoint that authorizes the User - authorization: na - # Or, define a wellKnown Endpoint and read token/auth urls from there: wellKnown: http://dev-t4c-manager-oauth-mock:8080/default/.well-known/openid-configuration + # Override endpoint that issues JWT Tokens + tokenIssuance: "" + # Override endpoint that authorizes the User + authorization: http://localhost:8080/default/authorize audience: default From 709f344fa9fc283dc273cb3b6c06594aa72ae30e Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Fri, 22 Apr 2022 15:02:45 +0200 Subject: [PATCH 109/143] Automatically download Capella --- Makefile | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 07c28ae3f..e1d3aa377 100644 --- a/Makefile +++ b/Makefile @@ -21,12 +21,15 @@ frontend: docker build --build-arg CONFIGURATION=local -t t4c/client/frontend -t $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/capella/collab/frontend frontend docker push $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/capella/collab/frontend -capella: +capella: capella-dockerimages/capella/archives/capella.tar.gz docker build -t base capella-dockerimages/base docker build -t capella/base capella-dockerimages/capella docker build -t capella/remote -t $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/client/remote capella-dockerimages/remote docker push $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/client/remote +capella-dockerimages/capella/archives/capella.tar.gz: + curl -L --output $@ 'https://ftp.acc.umu.se/mirror/eclipse.org/capella/core/products/releases/5.2.0-R20211130-125709/capella-5.2.0.202111301257-linux-gtk-x86_64.tar.gz' + t4c-client: docker build -t t4c/client/base capella-dockerimages/t4c @@ -71,7 +74,7 @@ helm-deploy: --wait --timeout 4m \ --debug \ $(RELEASE) ./helm - $(MAKE) .rollout .provision-guacamole .provision-backend + $(MAKE) .provision-guacamole .provision-backend clear-backend-db: kubectl delete deployment -n t4c-manager $(RELEASE)-backend-postgres From 9038674e5c41fd9e6cd0514735d6035fba299b85 Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Fri, 22 Apr 2022 16:13:31 +0200 Subject: [PATCH 110/143] Add Getting Started guide Step by step set up a "remote" Capella session. --- README.md | 26 ++++++++++++++----------- doc/getting_started.md | 40 ++++++++++++++++++++++++++++++++++++++ doc/img/collab-step-1.png | Bin 0 -> 31720 bytes doc/img/collab-step-2.png | Bin 0 -> 27493 bytes doc/img/collab-step-3.png | Bin 0 -> 47581 bytes doc/img/collab-step-4.png | Bin 0 -> 56032 bytes doc/img/collab-step-5.png | Bin 0 -> 63579 bytes 7 files changed, 55 insertions(+), 11 deletions(-) create mode 100644 doc/getting_started.md create mode 100644 doc/img/collab-step-1.png create mode 100644 doc/img/collab-step-2.png create mode 100644 doc/img/collab-step-3.png create mode 100644 doc/img/collab-step-4.png create mode 100644 doc/img/collab-step-5.png diff --git a/README.md b/README.md index ddb704af0..f53326e17 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ We have more exciting features on our roadmap, like integration of templates, pl ## Running locally with K3D ### Prerequisites + To deploy the application you'll need: * [Docker](https://docs.docker.com/engine/install/ubuntu/) * [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/) @@ -38,36 +39,39 @@ When you have all that installed you can simply do the following: ``` git clone --recurse-submodules https://github.com/DSD-DBS/capella-collab-manager.git cd capella-collab-manager -make create-cluster # this creates cluster and container registry ``` -At this point, have a look at the [frondend README](frontend/README.md) in order to configure the frontend. -You'll need an `environment.prod.ts` file in the right location. +Create a local K3D cluster and deploy the application -To build the Capella images you'll need to download Capella (binary!) and copy the archive to `capella-dockerimages/capella/archives`. For instructions, please refer to the [capella-dockerimages' README](capella-dockerimages/README.md). +``` +make create-cluster +MY_EMAIL=me@example.com make deploy +``` -Once you've configured the frontend and capella images, continue with your deployment: +Replace `me@example.com` with your e-mail address. An administrator account will be made for this user. + +Verify your deployment - components should be in the "Running" state: ``` -MY_EMAIL=me@mydomain.com make deploy # build and deploy the manager app -kubectl get pods --namespace=t4c-manager # verify your deployment - components should be in "Running" state +kubectl get pods --namespace=t4c-manager ``` -Replace `me@domain.com` with your e-mail address. An administrator account will be made for this user. - Important! If you use Windows and the Git Bash to execute the commands, you have to set the environment variable: `MSYS_NO_PATHCONV=1`. Otherwise the commands will break with UNIX paths, because the Git Bash tries to add a Windows path prefix. If something goes wrong, please open an issue on Github. -If something goes wrong, please open an issue on Github. - To clean up the environment, simply run: ``` make delete-cluster ``` +### Starting a session + +Once the cluster is installed and all services are running (`kubectl get pods`), you can get started. Follow our +[Getting started guide](doc/getting_started.md) and be up and running in a few minutes. + ## Deployment ## Running on a cluster diff --git a/doc/getting_started.md b/doc/getting_started.md new file mode 100644 index 000000000..41f4f2352 --- /dev/null +++ b/doc/getting_started.md @@ -0,0 +1,40 @@ +# Getting started + +This guide describes the steps to get started with the Capella Collaboration Manager. + +Before you start, make sure you have a running environment. For instructions on how to set up such an environment, please refer to the [README](../README.md). + +First open a browser and go to http://localhost:8080. + +You will be welcomed by a friendly screen and you can log in. The default setup is running an OAuth mock service for authentication. + +![Welcome screen](img/collab-step-1.png) + +As username, provide the e-mail address you entered when deploying the cluster. If you forgot to set an e-mail address, use `me@example.com`. + +![OAuth mock](img/collab-step-2.png) + +You'll be returned to the Collaboration manager. Now you can start a session. Select _Persistent Workspace_ and hit _Request Session_. + +![Logged in](img/collab-step-3.png) + +The system will now schedule and start a fresh workspace. +Wait a bit for the workspace to be available + +![Starting a session](img/collab-step-4.png) + +Once the session is ready, click _Connect to Session_ and a new tab should open. After a few seconds you should see the +Capella splash screen and a workspace will be shown in your browser. + +![Capella welcome screen](img/collab-step-5.png) + + +## What's next + +This introduction only scratches the surface of what's possible with the Collaboration Manager. + +More advanced features include: + +* Read-only models from Git +* Connect to a Team4Capella server (commercial product) +* Manage users and user access diff --git a/doc/img/collab-step-1.png b/doc/img/collab-step-1.png new file mode 100644 index 0000000000000000000000000000000000000000..5bad7cac9a7460f3bfef07c9daced7018c10b5f7 GIT binary patch literal 31720 zcmdRWcRZDS{I>=zR1(TcDaziPC{$L;-h1!8M?wfm$PU??>`llPamYAE=E1S|cs|$t zd!B!vKc4@d`+nVnj&rW-dwss2&wG6Zy_S_ExO(?04h{~%%NNhz;NYBFfqx_~rR>*B)K_w--9f$zIL!ol%*kArgv-||_+!Et28!CBV9!Quak zgF|YQP%SSAe}JbaCHWlZ4Eg(8U1lVF=aR!q8SzW=7fA?d9*yvbX2BapynHUI;PQ8M z!r4P(ClPyw;v39$D>INPH>~vG;~uM6$|+W4b-R2zTw; zXEdIE`&PbtV2U{zttey4w}2PUbmyB>zPOM*ne18m7E_w%)yeOZ)Ohl3ZCzR?{+y8W zT0%+T*(zEqF(yVi-?Vy&)uELYzm@fMVUM& z_wI#+1kaO^l}qzqL#|7Z{_53NIaTS7JJ-Fp)6QI`{YkG64E~kfJ(b?_s&H-aH8H-r zQa>?OJ{eM1TPt|fA#!}09B`f5ts+`hfBOoiyW;YOsm`xGR+{(wmmdeeYc-qu6`|iZ z;f_8z^D3zqek!Mv>BbT}``7c?m|%csxl;LGcWNn_p0AsqXPUd%b@RU-g3@OKh`J1Q{$JhwVgKP(l_sv8%6~#b*P0VjrZUS zbJVo(8GhNnRQ4mkI>XgbX3KzRl+|sGI8;37xxPxi60x|@UUaY=;|0I9HG0B8fp{x@c3I9~TVBq}_Ky2B8CM>MGeEzK}? zd_x%JI$~5&S%4v7b(8RB_-1}L!sJUzOTg@g3oCva+SZb7oj&+o%hI>J+JtA9u1`69 zFB;7o=q7>7>&3xOr&BMsJ2chGSe1~!&117m!kx*OwH%OgHz0!VU1$M@J~+5lZ;5myc1m6` z>iK<9S|VIrK`S1@z!r<3GoiSAkqRU2o1n?*AnF^V5`8*ci=!;; zuVi3Xr{PTezDyE=8#5@*Nb(HjIBtcy1XnfZ6?B}d)+t9}py=D~+z-$1*OnSQj_HZ(h;zhLIW-Llwd=T}e)G^{$nTDNPvI21B*gtryQ8N1 zyAYQ$w9N%G@vu8qD3Z$@RXVktyME-kUGPzbu`S-Zq08}FLEFMsqFr#j-EhN^*UQV! z&a*pid~Pdb9R|T0vu(R$0US(cy6V%O4bn?)ax{tESYz!9-_3Kb`Se%mFyu=s%X%6; zCQHJkV)!_o>h+$O$ON~s16X`Va&G&T{VOCIe91g$&CbP$Aq}=Y_N~%g&R5pIgfQZ!;ODZdndOK zs;aQq`{F5U20~KGc{(d!*+wk5EtJTEp1*s_`k}>&j)5Tro;f2GUDT_H$i&bgvxiZy zZeG5);pQHeB6ZsKdh zD}6tLmX7Y|i=%kIW2g@63&x~-bOP5}ST6^N{rFLS?y6Q{rZeTl&s(;3c6LQsPkx(x ze9rDWxI_yd7T(^`(fcTI*u`+eTsodT_VY|?lIA%1Oze>gBgy>;`i`}kw zd@RXH+zvSzj}g9CL*c?+9NWKzxy0SMtOZs)W2*RXKJVVOrrNEq-*m!Gw7)Ob?`P|t zgZ_8xrSJ3mzT%2KlRXCPLFYzR%db&c-Gh~hWPW_JC!@XtUW~7sNCoS+3U2lC! zN^)r79s4tsdGM`qEi+SKeCkAYgX67YlxEG|jBSmI&Cu;Ujk@U9ydQINDEQnyQVQ(Z z>_ly`xivV_2RHX>){rR*y)%9LXiuY%oPSb&q1&dNUDd{+dGXll%6MITj&93W zVaMPDm3Fy5#cmV)pMz-U<_x711(!~&%!%J*bB;N$&iw0evnwgB(mU1Q=NC||bD~^w zh{F`t;kB@;RJjoZJ^x%Hn%*79mPmKDO(9$u6FZps#yvHxI+CuVw^Og}hbcvFek*qG z_wZ!cgq5+4D<6YW{{0B)H)?O14LOWA$3s}AH!80Lh>hEpi_szPg#k@?Gt64ek(Aajf;$JxSG(YJ+ z=g_ZA)`ZW}$=MB-U3-x^czlrWOs35d$Cf6Ms=XcLy}U!fO?`BGH<+AypMaJqsQ>S9uR69iFehi+vprurmeY5$MD%@4&5?CU z!L7Bmwj~F{!!0&^KNxTUib|iQAMq-wOR>iqJXgG3G4AkShk$^B&+ZFBJol^vf3~&B z_tH|#2}zc&PMKOZ1^fHYGkS!Sd}6eBagmYGHTPaPyv(v)Rw6uae%PPqjr%cglTMMg z`LJHuYc>Pc^oOk!!fx+voOy5$4#qtO3Gk`8zf8FAmUu2O=SV8pj`dvQ^GXd1>y>3B ziOMakOy~^08t^5CBkTM77RfNZ;;fH(R81?f9MC$Un>nqFiw~{qj(ctO{25C8o>qE6 zQBl=qC<^~E%fiUU-|G|2+-`ea1Sm}@ef?Y34SQ5Pn%26B~1XG@c0)Bnqy^~2kurCdp$8H=6{D|-ab=_;Wi#a!Z`brpo>j8-4^Q^yaGA$)yRw(j$$m4f z9$hsr9erVbx7g+Q#BtlHL12YYgPD{vF)>f2E^g^po?Ycry z_Op)HRLY!$E)i1BHyy2s%HJ+IKAp7A8u&>f=5hWGo^W!^80loARET!_s+}$Tz_bHD ztHbQOOMPb5z2jX*y2UC*Y6?`9dxia+1TrFyW|+Mlim%+gPH)l48Cy$4*oxOiwWFiL z!H$~77CrPxL2aurK{IP!Dk?RakPu6;DyW-(QYs*5e`Xp<_j`D_cZ-FodCrbq_n6m1 zm|8NN^4XvxUeuQx_<^HEwzqni@)hv!bQh&WA!V1*qfXDnWY}C;T&W=&7pHDhrO8?L zS)P zPXp61{Nnz&8lJ6lLhVJUd>Cel+#^g|YR3EuymKVDFuzrpl#acqnPWoU9edzE!>;;7 z6v5N5yHg$3K0CeTJRXp`%~|hIw`Y%eCsL1ZL2?ZzE+ZxNTaq2#km;AL%6WWe-a&j# z?#6Sx=dMr1aoHdK)IQrJ71=$gRmCY*N%%qdKr)nnR)UM0Yin)b_K%7ReR-yT{|xNs z=IkG{kpDR|-3^l+<_s-(ild3@*gTR~yymNelRFgLhcTR6=K4NpnjxDctrSfi(kjNE zn32oi(`rT|z!0LsDA7k@AT+JNSnaA7J+{g%*EGNx`t;t14D)?Y;RIQ_rq{nH`lIix z8t)aM@~^20YMtjoTCxR=|m1>M6@T_|raiDa3biZXiAq@0m z^d`Z@bv26lF=UorRJ0(BH?`p+J4V%jMq_`_w%M**-9{bzX<7C= z`jre2b>c`ReGVtts6-~>zH-ln>NP#4Gg~FG z(!Y5^x>gD9!_1|@2t(Q0B274T)AgN@WRIn7DB53H_!{ebbzaHy15uLfLaV7^ussL< zg$9w3uySsPG~TPyQ zJbaj*mE*rVOfsmC6=o7?*Ch>^p}GcJL9 zedX;w1#mU%}CeO)< zPHJG;3Ah4~LE{m%gXS|S^E&Y_!ifYmAvACCF=F+T$E|5UMJ(B^8FPmMTFvUFTnm7( zl``Jy0(udWZoCfLw^62^BTdGIQbPNx$@V^tn5AZs zvGQ$mRVfu@#eQ@6M%->O^U#s1!R~Yze13jE?A^P;xn{GnB&THij`2OQk_Qpew}KwN zNJkeAXW=O2;uemDwHOH$UJ;e`><&2*pG(DcLKBSraJ}YKlL%}=YaQpJxcuVE3ZSsp z8VU|t0`=BHn|^_WrG`gNKOEvV^xNO4%8Sxd=>3{%GWM2MY&8=S%HxtrD_Em#H^)8m$%_hTsYC-=rSlj6N|1J!Ed=2@nXt`w--YYoo$^Id#rhx z%?40Mo>K0e57ccPk#x5FiNwUj2~P2;^eTBuuoqZ=a4;ty;9FRjd`qbc&9V}2ZPXv4 zXCZ&Ct2^!Lc{*mnO-Lo&Jut_h>T=@vB`WH(tocHB_;YrdEP+XZQl&n@JHa_qcKk0h z1}@e(megJ)JgVA@0^CbcBv%%!2j)a`v}(*wkO@G)J~T@9tA5R#5Q(&FOOuZRaf%FEdeetoiMj+B1%@=>JG>$?G>Qc~BB zc30_$f<7fC%J5Pcot>V%7t^(~D|wmzhCbdKfzPE>4LtaM3QzojPY5`DEGWQnb#)~@KDO6Oi2WZ(hLw2CJ)x>R(|RPA@RauMTxP?*wU){@`;cObh|NK_$$I_WyLb8A@}kvA zCx1mu+ElMb``4E2a{a)~4ZExjM{ zt*Gde3S+>86&*=AfCGpHC3d+PpSVlbxG8+be+m zIdJq)e{W3)pHi*kcUt?pTOIP0;I(n_>P2Ig^La*me4{I470FG0U7#9$tE~LGI_Au3 z+-vCI=%`yd%8Kvz^q$XzRr``dg!Jx@>c|e->Vi_!L8F{p$xqT5AKGUx`ia(RVQ~}V z?!B-4ao!iFux|G*gK~iZ)JJzLN8rY6dt_pwXRjea%RS<&zb7YUJw1hfn|!IR<}bIJ zcx7e9EG{lyIf0e)Frdm%_`=c4_vr;~mbI0B;Tyl1UwU?K4BUb7b!{eurg*1^Y5(Tu z^@SRoZ?}b)O#De&T2H+yp#C+*Rwxo?}e)}Tm?=zyI6cH zE9X_u;!XS~OnCRwO}`KD6CPcn?&HSyTh4isK-kXLa>!yUuQrmCQ(`#gRB;j{j&eF=t z`4*kU{@^65%}BazD)}Mo>Cqmxebwn!sD$fk8ET~3ks(__F01ZvIoH9#;kAZFcaCDN zO0~n|CY>8NnS(Dm?;3VRGp$V2#3(!wzaKHx=Y7hdUSahx;)Tu12-~FV0wuBdH0)Xn zbbTV5ep~;@$O~Cn=GE0zP@;4y#ya}?GOMa$AHRKcp?`Q-LR3_^J)D{@;>DXcZ={Wl z>BPlb@yWU2X+;9e9r*kAm68&-PLcPS7sv75>X@9oJWY)=_S{sX?}d?7Ct_ULq`b_s zGSK2)ii*}#oRRAJ*wjowAB{*(mb-UD2QJiNyfR{K&Fa;wSG}$-R((lA$ESM@@Od^Z z1U#?bylED|*0!{Tl4s}S@avD7F(u;3vT#un;_^*W87rs0J8HvFj2)ABarG*`mHal6 z;8F&(?wESy+Kn~B!Qn~KxAq~Uk#WPE8q9Q2x1X&iKNOh>BJNQ5Yr*^EI@2ROkVOjf< z`lR7uZlj(Auihi8ks@C{`}t3iku6(&BH?`t`nxNm(n*4`AV=BSvT15+T8x#47VEd4 z7t-dP?@R9cChDhBtcUC9=-3^{1+?palI#2(xXHj&dRR4(t7Wycs2)gsyca9|dF@0F zX~XyW#d#@~oeOGH>7U=1FDWT`t?2*sUcbBGV|(f-=nu3+hW+0}L1qF_V`^@mnU?1F z{668f$2BK@$}dp_sX1o6J39oh>tE{Xo`ddwNg~l64Y1+PA>l9oYq`15R&UYC(#A@c zSdMXbc6D9B^8$D2vKd zch=IJAzet*V9A8!h)(T$j*)p3zK~m zMlJc$c7u=F`*@@{Pop&2QoxDbb>}Z!-XM7}X(E0n&t9v&ZXE%zh(ZW}+U3>iGNwZ$D&H9umtRIZI z+O1xJKY#vw+a)o+a`F6Pb=cTy+ngONl2=3W$)*_3b*Co zpKs-a{QDNtGBN^ScWl+x{7lJ=VDs3wiDuF6m13zgaN<)|P)IPOt@LW!Aq(*BT5Za0 zdt4l-;&3mdv+33ywH1S%IIidSZ+`BeO;1N9I#LFw7MXUDBzf)Pf+~RP>U!}R4Lr^a zOyO*2*Fy4+t4clz4AdHd=8(er)`&Er3m?ywTcCRuBNWFSk9H~(Wb+nmN90hB^IF{T zK%jR77;TC*{)ig;b#-kVcpNVskpAlFNU6>1_SjtD$D2@AS0{Jh!y1niy~2x$NkqNa zNLaCei(z3o<+ya6(r9*`srF=z=#ea0-@DvGeoU2vP*jgwSn;-I18O0?rY3%eoEr!c zNRJky)uH3#6dAIK9%{;gD9l6Rt8AW!4smgDFo`tmd$>N5vAu)BMp~JpBUfBTg!H33 zJXRE3TwL&=@CfccfBEtXA0J=kgjI%2yabG*VwI1$*GO*QG)$?M!0Qiqc*2K=Nr16rWo6x?qYKnweGcetXy^ew1Nr+5Q<#Jj zVR?@dWg}muKW1WTGAg}E7}(Ld`BqCS0G%wZt}fu}T18AsI_p$(8Sfb)8|)p~)=a>@ z18M5Jl*Wg1srB_qFq@HWXjQ%R2s(pTlW{hMh*tuofYWPD&CpbOPEJl%rxlf2E$fD( zI|07Y!~H*!G5eE zhmZ~W=|qX+n6`%+={jlha5_fl!ce&tny_(%O`nXz?F--6Ws3!z9FmYbKAxs=Z9&zM ze}<{BLixELr&|KFzPzOoemSt@fMvUD%5-f*)rL(LV`gay?qhIpaKB?>Tbl&PLaM4K z51RWOiGtpbGB`hq9jsoCS1;y0`SQ>0K;&%U5+@H2o8HgMUh9P-jToV$7aPOn+}zfq zou6p@?r@k9t5;ZOmX?OZa%9X3%w79wdUQYH{*7RwtCIZ$ErJt&zZswZ&X^oy(Qs5N zhvBzbzgN~SXVZG@x`4l;Lr;8syl}RRRnAi>ru=a3<~>4MUZL915R#GD#M74y38@%r zjlN;QvM!?*God{mdayJX+F9`jvj5=TmW8&%n7~A?z8Fr4cet2R^050;!S2{Q?{eUV|fc)*A?cAIS78)3+?*j?TTAIG2&kF zsBY>jBb@!x(C5zA!dj!n8}4YJw!So}&-!Ln8XA9XQs0a{>K4|$Zo-O3J-w=`>SWll z+|i(*i&)rqk7M!API7r@U4;N8cq}2RaSG=cy+ut2q?0@pA`LvN51r1$ViOZyJz~oX zkUoXmpng~2z26}sE0l03&-wkZ;J2Q9v5N3$@)6NUU3at-zkh}~dtC-lew`JZ~b7b2c$CQP95Rtr4d{zvh`Y$6jaYUP;Iw z_$+L{FY}i!O6*|=RSPrX;XggEei{1f4ca2aj6e6kzr^|f z`^yjEs_yOr3`%)VQI5j}nq9xsBw?^KYE~1=40azmIye-W4LxztY%mG8B*RO2y_kpj z!x{RT{yBf5(P)X`^ZOA}bv5sA)WIU`f4vjXRD-RTQdTDQKAxpkt@q$7D=V}3`{POr zD^QR7H!k=8{@oOOn*kUCFgobKAo*&dOo5f8rM2KsWn?`1J2nQN&dJUFSvC_8)$p(q ze1{GHg3tWC(P_gO_AITSAPlg~vu784pEiz{KMN$>NTWXa5FJet&8XT87Z0Qr=N?JO z@BaR$f>aHEYF>Znqs638;?M}2Ll<5@I)RCNA-PZT-VKD?;@@F^AH|?tV%SAOEUw%6 z^3{#l`%D%z!bT(^{sRMVlnS+aeg@qt9<@MlVo3?R zme+wHzySc>3;ik2vT{1(xXj4}oEWuFmX$Y-PV%(s;*PKl$)lylrFyMb;guC=FM*+< zA!OLaTi3@<)HrW-G8DoP13F;XgaX;qe=_%0s4OfbiY=Ntvc0ev4DOAW#Q!|Tx!%a zb9#iOqoZ4RgO#8Wwuj2Bya;!7N7#cmDk=(}lK)F*=PUR|)pAZQ@~q;yEzdV%_c+{l zEu2>WwibHrF#P@d_p6XQcf;8UR<*%PC`Q|hZ*+7N#-$+Db=k~Y@jVhwPTVLBdxF60 z)JCvGKlRvfK%UkrjG1i@=g@7w=ylMgZ3j@1qrbGY6ij5mY@ZVoLvwN}HJIDND7)a9 zsRAE^AD2*^OMCVqJbqvy^*o7NnE4parKyX8J{Wj736&l#&4GlGyLrL_$4RVG8 z4LbG`0hbe4JsK-H$f>3Vv~zX;#A{}Q7l0>hEBGIv$2g$c=mAyh>3K*&2#AP51 zTvnD)t8niPR*VL(R)>|W_GEYL%nM3?%$MxOxtXWuUz{_2dcmRblc=$n#(AjOZf9*s zz4RDy6tXZeabaWbj6}u9k69ml{!Fyx+n}O+2v~P8zoq7RS?Zxxwl3Zr4fU?r-=H0^T zan-EX zXwPx`J|T~zG4wpVDd~xA>TmjR;lr#uBk=Ds7EWNC}cY;bg?2@3}jR9yq;9OV@6H7}WCJTOk{;a}69@GV)2f4S! z`Bt5wcUxO8{OgE(FP6e#g(uTXa-JF?t?yd(Qc6oB0|M~2YL`ED3ojkX8hxuvhG%JM znIPyoU@;URMx&Ic()1u)uo)gF;GOP7ff(pw-cyGhnXavRY*6sXEJ>72E>8wNke{Dl zyZhJt&(P3L&1oyC_DTg4PLs~3NIJRQ+zgVCRuD8<_l)7M2GpK3HmDmj0x%y6C*lRd zv)*JYG>jb%OUh*q8p-TtWMqWrIZJ+Mc%Lx*P*`56K;tF2cIxOul7oW-9FMJd^uN7^ zGa;xEP@=qcOOufzWRLwbtQ^6|)~r>Buy{;g!$BU*@sgbP z{kx%Ww6uEn>i6or7O0HrgTeZm@1RTmSBBDp%K>12(C&RK`A9awWU`MHU(0hxF()Ty zzf-v$R!{fWCz|64^a&+7x5d3gS$mLaykNu*j*MJx4CR^p6;r>R&LNELo;`(6nu$`@ zqKTEB*>Kqp^xnVpNG|DPDt(@MMOYxU*H?H35@8e_4aZ##uhrBL+Ig@M?rl*%03w_k zmB+d$?Ed}uh6D1gYfa7#N1EK$liljpb>dH=?z6Cjdmm81|M|Dc{Rf%ggI|sP!$kJ zglMyx^xsSJ*nCOCq6I-7oj+Of9(y%tXpH~;RA7tmgw?_&k^OTpEn^NF{BQXDC~Bqq zpi73(aZx|Kh?p2-EfK46-qS6Sv&iFP4?s;)s;YMyPFAh|dxA-B%Z~{uczp^mP?cqPv4W}WbDQGx#gCfF$2erTFedY|)4_g5*G=GsShVF@q#;StOzHykQ945WCU?RodXN187$FYiMi0jRVfa<(PX zv#{N8ws$r^YMeZ`T7hn3#Ru`B<13r~{z0F2Sl65$szCD?R{ue`&@Nd{&gTAXIEVMC zNB!{}3kT4pdgy4MLAHYrhNkxXe$#dD{bx8{JGt5$Cs^-fQf-e2c!C#NSb3dR$iVcZ zKHF~>-0puSc(hV_qW1d^7`f(!bVrMg1*)ZeHRA8iQV4r|y~AO&UV}afqj?sv9w>4Q=A=rgQRqR^e_J5Q`_y%Jb*w$& zfh2M#y+V8AEy(S|2IF<-$&wsso}dMP7+m^^-P11}{ngRIW*(KB(+RfO zXoI(i_VEm9c3z$VNShkAt+yFfOWr&1heG0@jojK`u|EZ1--W;yQDtS6X&=jA4;5kH zC@9r1e-O0le~mP*4?S(OKF8vHM_eAMWImVmd$5K^jUZM1r}fIqH-SIUvvvRtDGJ8J z7EIt`peI0x6B83*Rj(!YwJ!+o@gV?|3#H-Lw*W9_(j6-V;}*GVMCb;iatDKod_fDB zKb@0XkeZh#ZA5!3nI0MM&*X_g-2)0TZ!59*II7BS?$x`ddwqgi_~9a_yilJ2y(tJK z8-OS`#a>~9@&oM;aN+%k%P@7Inc4%ANFpi60VigByc_AVHjDi!}9T_$Hz}kT1WXL7Uvd2D`Ck8Yia`-!3rQG5U5PZn##nzE#3dhukA3*u9 zkLZU_+f_kC2C}(&WO&6Y-Ff+5%kJNEbFTpirYF8n242MgtyRq`w>`D?$0jE+4GTMb zz#r0y{85N=m#<#IuHS}_1I@Pk8cS`XwfB+wq#K6Gs&+%-bl&6yw=~D7(5bO+4vO#j^mSio|tcgZ22t06vCO4dnHOPZ2g!Fg- zrT+=*R#uOQuWnTJdG>n9#x5vpYRWu`nh`)B5L#8lgX7HVu=pB`(C^>h1AjuG@@C_O z>tDwdU%zgw+nek{W-)YJz^IUP+JZYmQ_!O-91BeUnx-UHX$^7$qmu#`2UxUz(>vU! zeJ(z*<-m^hyL5fN0j58hkQ*mCj}YGDf!~&w0;vhus=yUNMmHEK(v|+o>ihKGQ&%ZrQ0O zR=}AVCVyBMAt>tx0TrqAkf=+7t{N8~pPiL8H62KuQBp$G!V0Vw@y8MpD8{XLkoR4m zYC?()-d9xg+<&7cJ6m^ueHuz)z9&AgZ{b1ItBrIP&!B^?g|wU}h%OI50z&RvC8f5O z>muDnx-C9QO+8aFrm_&mmWtlXJC&6}B33vv8F#=4UrpZD*c)2q#x1!&jgvKxYISj-G)* zAC#qeQ~lTlR|whz-y3nh6;1FKKM!?FNEp?K*X|R^g)hH zT%MkuzVc5zWQu4Obdgg$7kn<3gW}4D^FrtU;Y$VnThwZ_MAJJc?abohn?6up&|i`M z4Yx=Z&;;$DjML->usYH?Hn{{|QTEvHIXTOz!Z9$7_yq)F1zp+uISQSCCk|%How+!h z6+#Kz3~413@e%~EXulwfcby6>o;7jzkAT;qy9H;MYIq&Y;os$4tc~fB_U4C{0-X9Q zn7*d=${<>iFsc3g{xUKvC+B{w^d_h~@Bl7?-Xsq24laaIr3g}f%@D!4>@Nl&=TgO3 zPZvuAMD7g?4Q;{b)_8p|nkE^Zn)3uesBxVf@G&5bJ8mqK*XVvqK2;l;c~%Nr28z*u z9cZimc%`kyXo)}Qe1qfT5K7I;fph^VI`;K5_%eegK*G|}F8H_zBH0R- zdM`!;At?&N|FXr1Z48Ux`}7;SB-S-N#dz%>D6OzUfXE99m|<8fE-#<|26h|ta-xvd zto(e#xy~pMACN=_0B5MudYf9OFfAKnb{BQA5NJxxMI*hw#xoE zCc=M#@_uO51I_yja9V)VcVTuyPlhbUPQ3B)|K{iyreI(Ew?C$u{PMILl7LJM3=hL8 znfeY)VS}u_JqNtvBop@@;4&*dKva+i=IyWfi$P1e71G-6nPwVy zP!F0OT+vq9;?bccWCRfT7H;x>#D{~)TQiXo|2@`G3k79m4vP_1xGW&00D#7<8+t&q zu3XB99|7R~HdEGc^=}z?kZ*v}lh&`}QV?DONnZz~Nx*stIzvb*JYaB@AzD#v^7}q> z!?7K7vx8>R`bJQ@akMX4v_8%g7ILEgE|-U?%jEiYn>-u=@6w2<_XZ3 zb??)@GvH&zUMFsdDUaVW1?r7Hq#b~(!)QZZ4Xc?BcMX+_fKLcCjZ|1uLyOe`GzQNG zLC$~%03j___bMuD0{qg0G6&e*O9N+~VA{gP6}j!0=@pY9ZwH%J0_6ydL=1ikXfYsS z2+F*JR%%rd85!v}xWtJ96xaHR<{2WGgJKCzGh$V^)j@s^hstwX9-cdR&IsuNuyP|* z0;Vq^22}_kf&&zL2hDb~GCN=y<<{shI1mDZ8W?5V$(z?uLg!79avV2i;@b z5v9p~6uhov`w4*=g_dP4xjgXpM8>!Q`)=p7d|ue7MYq;Ymo!$PfhR!eJ|wS{DR;a@5qCo0+-H1koYc zA=p&lKxnxwJ><3+(W!5MPef^Z3n^>Z;v&=&R7Chxo8x`kws7h`zw5%k01v?;rvW5a z)^Y_q1|b3v9w7w0XYDad4)opc@!JemfcgNCkfbPxlF&^wm(OIy5|CDvxkpy$zUthNrP3$$l(L=G7pHC;0gZ}&rCTJ?&*22!ve z2|Xwk3ebfUz+e<5_XQSUfS2IFeukk2w+WvGiM9s-Kw*9&P7tX4INgSDLsk_W5Yl)h zB?WO9u*~|$m64|enrlwZ6MJnV=~#Au@DRd)7R>Cp{pJjXWvJhbDzw>Nl!sOH1GNzh zJXmJ0)2(E(Mu zYBo$DtDwLL3?%@N9MDqWNR+a+Cl|8MAmGAKSo;~K5TI(z&S&VEJx2NfGhnpAiKak8 z%9)sk=4*DttqjYUH%stS0HqP;)keou=ddJdl3yem44g}laE-Q;AeEr%@owE!EwE4 zCUr34AbT0V#ed`>3?Z+^nbwd4AaLNQg&c_Mu8mjKf|>>=C5M!?dz$<%9o0R;0W%R% z$d0G4dpE**yKWl5eo%pS1b;zZ6_iC6Xddv$#$9GZ9h{v@omSNlB^KJ4tdbH5Vc>-Z zv>eF8u;(A#4P^&X@ohosJ){aj%>Fkw#|Fd$^oD@3)klCekI-jH3Qt-=-vj$t@ML>% zKIR>e90ZUeI&frER4WLVVvr|^&JWF6<2%Q39(r|BW0wyJN2>^sh7z-$%#`2k(7|yrtsw^M> zq#G6I2pg}s;Gh64@!3MCTBNtLv$OgSIg@ZK`-Kh|A=5Twfi1d(_3Zc;Ag~Jf9PFd< zaSa&g{T%e!Wo5T(CamxrKxl@gG$Ji*pA|(pf*QBsRtLd){FX+miot<_cff501Zn`g zz6Os0fI9e}JUlTkXx~8$>~83c13%0lxKQ{!=*tkzy&rK;M1)#g{>7t67{V|jdJdvy zH+bQx%oi)Vc=yNZk`a@TKsLeD)D%#}@4W^YK`L-z0WbYFA#Om2XPAQB2CEgfR>e=&4*pE6&_kf2;0k-L3~9_9C|f{-H&Y`MW0(xz5JuoggOv7 zIdF8umr}wUQTs)_xCj;$3>r96f=?y5uaD-Y>HQDUW7L-zVcSBRQ&8k$u->^HDsiNE zAG5N;nft~N?>rM}=^Yk0<_tCi zV*YHnjC-s|-)4{*biw3TbZ@1_uxQIZd*-KF#|R1fkr9(HkHA5Ogq=D$NS}kk40{3K zDR{6ttRGV8>4Wu@bi43-yA(9K5>CIopzSuZ0%k_>F(!NdHen#RutsH^iw9z#M+0LQ zC5_1R?I=l&@yZ!j_4O3mk z5+5HAB$1n;&(Pq>_)fl7Om_XSG8zR;r{0zK1ZBatnlI_`q@kkDnQq2{_7H!F<66$=Yg1Ou)F^Q^4kMau*;ET zQ4bGV8XV(r@8btxnSfAVtkZN}%XRKHDEN?&fpk@oGgd2rfE)t(=a4PLkf+K>0?hWFE-4_%P*q06$=1hC)&a`uVq`f4y)+Dw z=Yib40XchYb$%=POpv8+n+OD`n-3&d&Hm79d7n6za*YiPAb}qfQ`2csHZHn}t%8Hd z#n5k<(*-yQ0cwcG4HN-N1QrHK9sv~a$uI?*U?{Jy9-b2*6V+{_$y!$=2f(=M2HMzL zRn-n4+1-PEr|7dI?=R8OZ!|S~V9da;4H3j$UHqLkf7#OqF_tl+#3{BoC}!e56A!PJcX8L{+UO|xn!_5&h41=fx9(EOopL`zsMWYuWwbsKt3-q!-?^E=ZImi^j z9)KG{Oea`-WK)zH>!RyDaS%R%a29B_5G3Q7aJc2Zw`K?;Jsh#4%u_21)?xjHP)5Wo z1fvqk=)fl#75V~lfQmunAUL=J)AqXHIs%aa51%gr?VvPu>~IGY%V+-x?xAhkh82Vk zBsP`w5#)O|(EcD5)(XuK`X2ZwoHDca$ww4Gy%F6A!Xu}svqNo2qA5Tl(x+pxu>Eat zUf``S<6A?9x3;eo6}Q}gQVf}Kh1(j5fsi~43dhSwpF6&*Ix=$TzZIn7p=KC-2*1+< zP6L2G%mzKkEBzq{^=52!e{83DtYz=};`Uk4qrcv=0D@)AxIuW2ra3!#H8rzg>a!T{1Jcq=nyv8(s|r59KL9(y{0EZ>;5ICC?fy*2 ze?<-Qk`XGe05kvZaclwhW4&S@C>7wDX}Hcsfl9SG_h0A^^c2YWZ6QjH4e#O5FDnxh z9bi|8TuLG0MFB(+MN=AnXvd!jy%nwm)KKV^$Uz0fJ_S+8ygmt_3iypccmKzc`;I=M zwfAz(5K~3Jvd+nwajF4Al$XaiZdGyMbzTK34|FnM5+GvsJh1|7<-xL4Eeo;~lG$^r zsna&B?OttdZ3S@K&Nv?FDq>JRXjL)0bpX1?$)n;b;`RyuPlz}I$k3_+Hf0M)xBJOw z2h>Q4Ac4=`C+Vs-K&s^9e{{$r1*JBDfSh|B_FpuJGobJ2ku-pS^X1DItDp zF`%zN*Zu_DP|o}CEySBTAjA~}!l!z9cfvV*x11`lP1zuFff%W9OWn{5nrMtF7^ z?^miFF>n+Y1T8@DAU46X+NuJ+lpvewng}la9Gu*L)z#Sva1x$9ygvxO|KiLGbiqJ{ z<6pl8sjP}sKo*)OWd%%C>$-)&93(hlzt9Vi9+f~ryY=wN)*%i+MWhXvPQ65X!cnzz zAizIT${q3`P=?!uNK04&2FdY&VFQXRBtJonM-nU0#NYrN7iP$~d~nr?19mfLjxPTq zBu4sZn;rv_JtV&PJjzy|^AURglCN{@9))P`BR=u3V-~$7+ zD=NBCGXci_KL~~0Bg3~td+xbSanR3!NJ689 z9{;(+prKP2mP_N(Hoi|69DU7Nl73h&-C7Ci7bq7&&(AlYt(8dqlA2Vg!rN<^slwq} zIyyU3)6;SP`yB=KqwY6DC4hw);c_Y}_B^qL{4d~_QU}W?QSAS#y)O-?dX3xFRtQOv zQfN@3B=bzh2AQ=)C_|>qV}@u@WGE?O8H*4}hA2abkZq>Ol%foovL#9C+)wT6ob!G- z=ephx@B8W9*WOoqZ);g={r}JNd+y&o{MO!%#dC`6>bOQgj+lq^V%!t3t!Z=`J$oAq zU674HzmGg7REU%nc$w8BMuSggn0Yi^A1N7+1E){cH0>0CjCv2`tX6{L?7N_~zykqU zzxqN~Xzoc`EuwTqWjp%uI{3B)1O!T6CGfVGLo^_S5I}+$=y+iLk>4OIibMlj2#PiMTR`x`*b0htig089+#0gQR} zJujpkMt@`3#>>upIZ4{Tsq23UH}?;R!6i|pTzHUCb?gzHD?hES_r3Y{PBOah-j#id z;&3%wUB^r2;}I7$h)`%;`GAnvePT9E+t4VdAB`pN6&fb$;$(lxEj+^PQ}afIAC%)I zhg1#NuOv8^hN9wOA{%^7BWj$+#>Oxs|NQFm>oy23;IB3>tbFiFvcu;Z(2i;EzPL|_ z5&s7rbmatG*v*5_PVR@b_%Ruin7GycEg}~Gm;4v|^jjO+R|0#$=g{CZi$aEybZy^v za)7S@{~%&fec9u>kjrmLD+uOx@WlK*5B3 zg~zc**7rQ~m%<_c%ZNppP~-qTx#j<8;B9M{DR6|(g89=mHeQVC{?Jm+m&p?*a|)am z;2PI$Dz;Gnc(JQ=!nEFJ8Td>9DG2Ld-uia72u%29^B zjUB`R>{CPVhTxUBmkoApI}DU zqf?Rf!xkV7Y+jc@K15|24QRQ17BU-BAA{oeVYI?}23W~_!Autf{jqx@9W@9n$>7Xx zs^*_$Fb8Zt;Mv2#?s@b!H@&NA@;Ct=j5I61KCk^{UU3jz5`GPO8axth7knCb?o`QB zgy#TU(HD|Da$_SetQDg__J&z1*28Tg>D>PkjgSwaKLtd^p1}Ug#!QE*grx~-O@_bY zqx(9>E5z4~Bf$ow8E`DFF^bj5;}n&1{qW0#*cA2Ghx$LAh*X6%l^PUC*R1!?LiKj&y;0W0y>9`4t?Y8eP)HZ77 z&w+Du&DgAjQ3uJ4iwHV91~nJk0yEzDf%a_>q6SC1{@TGFlufka;CAAi`if`2bn1Y2 zKLiVWs}cDOq_Q?CRVBzoYP1-TiS8y2Y!h1T+Z`GXpDl9@4Vd6O zxWdri)&pe%LLW!{5|@z3hah_=(;pj2YmH1f0_p-wgCzD;T*svL0KU3~MMl!KvW)n3ElZJff$w%`Snr zh^h@Nfe}4Xhv5wY_tTF{Lgx4V@#2!G1cVxLui>N-hALh0t#-dV5Gs7;O`zcp!V8_9 zEs7op6`~b-E}UR1&0l9zA~?l@iDisjQE1*o{5bV%{uB{-iAV)wKL%F%btkqGGh5_v3^Wgy>tK0uF%3CyJ|&JkQVRnV;8T%OlJahoDgv z_u2mE=xtH)Nl!#LBJvTS-hBqIluSJE=mwEo1L-H+#YX)B(gh^r=g`a{`-Y2g_M>H~P zLRP8rBY13Fjw84D;EMGbPmhHS3)pCdy51&o9W6Xhh(IjW+Xry;n47q6I~K0L<_y; zNuL%1WB8YZW}COkzOWrYpg?=pJOPe{n62}T1of#prlK9y92>PpYFIH(5bp)33tPbB zHRX7|L$?r7af@|v@zANHW7&cB$SoP!3~AiB=*$Kf1aOAZ6!!UI*MpnK@f`=R9hjZb zs6#v?eFIUHFod9JFo0`i6%@RMCFs3YI4wXhDdNw>CD+*p*7$m`Z>OiBySqd}MRg{zXdU>GmMhuu) zeEle}7P@3ZLxTnUD)K+S4HNI6iF3&n6a=u)liTt~l_0_%m{s(Hpjw;owy8J+ z04jh=*RzCBAqIK#EnP;cS|lWnyANxfCbh zc=I))8b%Q3E5uS_XeM$RBsP3Bks2|eFXKX+S>m9^KO|>^4?^;=^ekMY%p-0Zh&Yij zG81H!2ecd1Bl@awPZ)`HDH{NhQu#rK{0YE-V>qxKlWU3GhC_?EQGrzoZCfSRo`RR? z=(4|C1AljN1hI@RO&vw_ zcSqEil+&lI^R_1!nnWCtZ~K#mWMU#J#m}a(CE3$-Nu0sTz?|)NuYOeD>KUXy4@V_K z?Sf?2(9%L^X5w%G_UPj>>P9z~_VR|G!2y#7kBPt~}hb)5i4t+yFIDaN$4OKR@!7Y%o~o;7qK1mEf+7{ZEd2 zkTJ1-2A8GxLnCt+K6o{fcxPICQ?LO~erlFa!`er!5t_F#&BLF8&p1`i^}ZA#liV$7 zZd7q>-D1`aSC#~@)pBm6+77_6AG|VVd@&lhV*z!2;O;^9!Y6+Tl{0ZZ(ALBo>>n`- zj~xCKj@bZI5Vc8jfk5lH@hwSmcu(bHOD*ulJUR)tPM`WIB!sJvn1_e&!0$wG4k_`{ z+)h9ZK%3a~f+~D_B`RuLteeVA27B`m>CQn+D}xs6mNg&F>9Vs3w)y5eHObGuy$>(8{@)Z7K0{I%R>nhzpBf)@ZiAQUq6;G%d;v85| zb5LS*#5co^Ls~dOpuzG0B#-Xd;}<5Pt&s^viwQ`CB}`0pR899jrzf+}WP`B-&@f!2 z=XnRU1^dhZR4GfftlQ8^l0^ew052yCx9p3QUq5U;&1?b2|J7d5ybvEYFeG3cTWn)( zz{0>GtXA-0LyMy+q$ zu*0>W?BXnju#(W6Acc(sv+@wqNFV-p133Buz@6YLxW0h7iMoIy14DQOmrRG?<@P6jufbjs z*c~Tszn&OGN#B7jGE&eeWQAr#snuSK+IaY92EL#jf#tHYR>K00nF4?!=n3K&RQ+UmpaIfM=X@ zq);SG2B|_rK#&NKVov!+0M&#J{d?mV_RE0lcJT*glOz{Z2hW(5=3?zM|0PLPWrlcbj@|}-E*O{4 z)PVG&4t$~p+|F{O(?tdj%b|Jy+Dt<|HkEVo7y@+84%4#`8pN%~VwX;835>Z11fz~Z zRSD-S_+`=XGX!YC4NYtpG{pN$0$Kk`SXj5Cs36wxZ;~bpn1YC2AnJJ{>3u5wC>dcr zB<($0yRoO-R}5ngbNC1AsL&2ND30BIAD7o+p`@&e)%O1c~BED&)}D1MfIaZ z5`*~b2gkwKpyP}^a|)9V^rh8J*{Lgz!RrSP4%~C2bKq`K%50uEXFRsc*Z@uiCYt(> z?!=1=y8yn50Iv!y5(n*z;n~2>Lw@o+n5xmNVTO9Wu54XLGINSHJRsWQgSrsF(6h0*O8>9 zpCTlW0eQ%9V{97!LVHqp!X%@^Btzer&r^YCE#NT(>B1AHHt&owYI7$_jYIc&H1*Fc zVAM%7hlfo(5;36}_P^(x@om0_Ig=!xj4!@;tYJ=FP8@Fsh#0E5rD3ab?h^PTGLGax zV7c)YGluO-Am?X8VSkE~a(SEnmKopsa)DWv4QwzS&FcS+K>n-#b6n!e)5E2_0$ond z>G`|DEH?3nxo1g@-+U>*(6K|RFoR=g{*BN)-|E>cjF@<#4*Tz;3a?8C{o8rtMAC;OjF}zwdvzP0N6}bBY8g+9F z@nc27#nbDCcC?Gr?u>n#`DL1IJEAS**Y7Y6knP!xvBt#5RIk>(hPf&=`BcPs>BUsn zmf=b?o|_WqE2w>5HHbM;{HJX<(Um&i$^P5Ek+W`TpVa_OQERE!z}U0pWv|uS75&gJ z4q4rqpi}+3yeVGaF4#in#%3EDo4{`W^N%>Gs>Y%84;MW5x!(=oytxKj#Nr zlf&1y?4|aVFULVFD#XxwhSUTNs6t<_3|oe(Optgaa&BEcA;c{-eK^IE%mL3{K?hotPZCyZ`#>H>?K=GdVdCMcA`l-i5u0}pK?RqRcOrjaG3HT*F#brUb2zU8eKWU5P z^F@BLFjlj)PxhbRWcGX|Z?JWH@4C?|wM7aS71FL2nVjI%pSJF<(5{Pk$=9DW)RM4g zv9s||$;608brgGAc7cqK_|@hN_u9$zv+XxI zidna&X^!TnR`qkLPxkjU$nD)6CzlrID;92CoDtGdF#G=Z8YnQP^yenKN<=Ks%Cq??gaobm&co5wL3h_R%+BQvITGwH8>`KG%KXHmB7oNl-$9+b0O!I1FsAnkC zteft(s5bun^Pk@-yvEh&DNnn$YOYb2V)X1TrvnWlo$0yM}8|K-& zt#?U^@m>er63eQWEd>UHTQ1kfG-Fv<) zUdOj7?~J$U#AG~2hh6Kn()ineJKSy3mSB$2|k*znvYK<;{QG6MJ59G?Zz(5DO`vd|~b*&cjV!%}yfZ zdTT1*^jI?@YoeRHDAMxQdf=?W=&fgAi; z-L?zeY`X8*-uTX7VU^m|qtHoJOjlyz-;0;`o|=kY%=4Gw=HPq%;fNiRTNIYE+dANo zecfyB3J&8hfpovjKb3*>vn|P5ENF zj0*}b#turi+>BY{>AkC|50!{Ml1_wqI90LIPVibrQbh|6DcOg=RyoKg0N^V>2R=L+H zJC)>CJs^O3cziI|YT>7l=fE~rO;(0oD5BGcvuzh$Z@QihYsp;+LoRrZJPAq-3Ka-Ujp0B^0b_nuUIIo`$ z7zQ8zZd{m8E$7i z+MpFDozH+|c8IM3m&QMJ9k+5!yIF9TEA!@%sz&@BvhM(TI<+JW{5-C{zdUW|Fqlo!oCX=g`N}^c?60chO zskL{isvYRr82HA>|3)QrTI2NefyvzR&!bWbL+$HKa9$}InS?T;1F?hht$c) zHDv?U$w6k01Fy9|ns1dlC3iVhWuxMwYg1)%SJgU!MOHAJ-JNetp8!rr%3$c~aCqkd!KSbLd^vHage&etpI{vtyL+RN3t*08Tl* zZJMI#SZYBS*M7H`Lqj1Co1;l>0X17#|LKCI3iS7%JpVymx(%c;7JX^37 zD3msTmo6{bXHR1L#`Es%(U@Um?-ycX30b8J2=3V{JuzzG=9_M$nl&vxolQ!IFV{~O}$iSr){1<9d(bjCD#MEX?IpOoU$@u%x{jH(E z{NQupg89aMPHxP8*OO-6^eLab9`r+gcf504Usg6_P-8h7hU#x3B}T_qh16W?bE=&x z`05zqY+kg7nR{~hQ%TVM&7bO>4cue|fnnlp;wIQt5-aCcJ1(BurM5qz`O*WaI4%|@ z4$AYXNtuEVZhd+88ABXY%m3+e(+D?X-++{X zdY3P@ZiK&V;q1-BXM7Y4*;fH?OFjsDo&9d1mny25lD1oA^1!Pr&YOJtC3UN&3WgTu zr!%ddA6<55oIT>+l0*4!daSC$Kc5ysr>83xNYKfG1f8H$A?VbqarNjfYDc>`H-%C) zX8(-OKvpR83UKm8Ughhrf}ai*=oc(|d)8D5S2-Jm)^@(h*%R+<{>0>JeWx_HVfDZf z;Ct_c^g*j}zg8NNCyl*xK3^ibijCL>vsL8p4tpD4-7TJDxFLbEt3PQ+OqbgmimCSA zD7$zyecs)TE%|H~l1?teT@!m<%ls-%+r7_tA@TOU(6;Rve=|pBS%dwDdmX^-3}9lkrz6XWAPTB_4Mv{8BeLr@VK^Ks>OAkN}{^k-Grg)qt7;EqEF6Z zV}xkJu>E`4od`;6!KI459V^WAqQea&l!;S~=8KKPh`ViFC_ZH5#|tg{<_ zGBkvlrWA_Knu$)9BesDuMOOmqx+Ly^guxH-g{T=)CStUWig_^s#X_@z7HjT3G<<-e zB8gAP3}e%kF!&ihpwMP*-R#-*Xm9!1UA+ixUIIyKG6@rNdfYO7K#U3(KC~GJbFZ>-|o2s7HJ`JbFN|}#e_O+~k^Eao^9tCCRRgUH7wTmAt zWIkK4oOq@)(mz%4=SzYoz6ZPTMRzKNCC}yD`jY6uJ-qDk$l%$+5f6&OqMdo>=&b-Sv*is!3wDhV@#TG zT0ZpUUBx?P+kk|b%#(vsc}w0wDSnfGelD$$w-oF>_^#{wkASYW;*Lr=)AwKau%S*3rD9(Q?{ykr0wqkAej$Wy9o#kb5 zTL;dCXFoL`jujSV@A^IAc_AsQX^eWJ-PXZ4p)pWbH)X1{aMk0>MYzyzvcp`JTSndb zI90y}seChC*a(pRg33ASHqcYOoMW-~xghSxIr)~|FI)Fs-gTc0jE+p6RhIhs%Tnl; zzzsbeWPg{QrX^R{F5PS!Nu?%PB~w^_L24`KX^h=iZ6ltk$deM$6XD_Ekt#fqeU68BVHJMluMog1 zW?MnZ@Yf})hsqD}@XBL}PfRYu|KBis@*H0GWyiyN`5F)J2wr-*h==FFhljUpjE5(d zjE6_#oZg@&0dEkPD#^>@o#X!d*qj#+uMoN`D9aHpT%sns$vz_dFdq-kmP|qRp}P0q zwF$2e`nv(==a^>HalgIOdrbq~s|r`H%KmeuY_XG!!2X7ih-ZreW0#=Isz|w;{`lkE>~$(mPgzNUybduo|o8CteYu<*~LD>uK5(#89e(MtO#xSjZATU>=tY*@x$ zU8p<_7@A^Q+20COsd@@8&P-S~Q7~^{WRa@0HD;Hw-@CL?(bf9@y<=W9#dPF0XI8Wn zb}FUzfF_XT=$ZV9gq|}o?r55nm#d{_FyA+s1`6Ryh+PKUM%;rs3`-(5c2 zrbKwF+Sn{L>8sSzhn3KVWziB4(b7IPIa4qo~E6Bov zqNcB{W!Hb}{I}#EIXO8;WBN;?&rgb-0%oVfgT`cAsxs(KzHIqcAC|>fn_b@fY3n>T z)oy5HWVAgsaE9rrv>G@uRzdNFz4n;qdelTo>&ndjn!@R(oLZT7F{8NW%rMK@_hut$ z)bINbq{=EoVjnf`{ro93R@QabqA&!dP0ejvR9aF{*F-TCnKD3BuODNtDI@Iu5k3IxK#WPVwjs zcA)k9yafCT8_ST`VN>6|hCM&+t7$iR-wsaqruJDDiy91QCD9Xb5^c#|Qy#WS79~#V z2`x}Grr|dj?*7DIRb728x?|I)`N?S=#iR5f0wPfZj@jiiam#+~MPD9yi8$khqET-NW|DT=p%U)M*lbRbbh72;717`Bw0W#ieU=HP zHE=vH0%OiY`;H%rJx!14N?%L5U*ab={^c=YN+J}%@PIw7!?t?HU95{_*f{lXed((Zm#ayK(n@RP^Vq_@6H6OEl~hUaHu#}UCIx5s%NODBd<<)ng?To=2=RQw(1#f<9jK28onhO^-F;8BU`TdBJ zmAZ+Nt1*Z}vwBBbGtynj+z7FZd*&AkOlS*68^>R6Eh`XT`1NBv^A>^OuDMspMLGK`heaq#v$sL;dwv zRs9-94_uC-R@|+p$i70teMrWHFrTxF&ndW*R_loQ_QkTKap6v;|DF$ZKcZ`}kXJai zI)^i)BWoDn&stlx05w|HLFz{v_A2=OfSuV_e7Exl$z5lg0{pqdZf)6*&o+15ni>K) zPVr5oj^Y|Qi9-#8qNqaE#gy--+{&BZ^p*T(>XOdGVHg{3uW5Ee;$_eL*Oe_iis;7* zR`>C~QC@X7;J6k&<5^F@t1z>>^qcNg+ck9!HpYl|3RaxAuNqhDDzL}bO*lSZ5?E4? zlxI1|PbzMBZGK-)EF-(HG5kTR>YaqIrfOfllq?)32|d%%d8lLag)TWl_PsS%tr)?-UnR>#ii+uq}mg)=oys0gLWX<*yZ`z*`G)^5GH{d-9u%h*}FF9gc1 zQb)*P^vC7s=!4UilZ`0)@U_^(1fgvNHaUQj>e;h0ZS~X`X0!9)5H5r9H!&vt9Dr9! zM4wPLTm_MRmiRZ~yN&TY8`sjs$CexVe_ZeJS$jr_KIlhQSWiDn@+p_by7j+>qh(vy|NX@Y^|E?!b#FBwdSBn| zdgr@qlZ9hmKi%gzh0+q9vdffxdTlMxc|7UIFYdLL3(NRasGVDQ^1+>ig?Z)DsjWI2 z{W83$0@taZCSqdZ^;-?qBSo6es8lj-El~^H=J#!K2UTY)G?L03j>&X&^{$3KDr#B1 zKZHE^w|3H>lGkbc_1N0N+?N+0!X9ZCQIj!=J+;yjzJ7gvylhXhNV_Fn_TRS5faC8r zqLrFAu0?GjSD3q|%PQ;2|EcZjOVp~(!npQk@Q3U3bPYL->C_oZO-M@W`y9@{Za4WW zCWaT%(h^A0KK0`+kJSWaQ0tm&<0eIAXl2PZ@EQhn-__yqP zjAVrK78Z+PDt8hdp#)YvkMjreDl6m9N1M}(KfZRp^>y1qsq6GPotgR~X9zmnSwN8| z@1Kar3b$Ukd+vWMAPPjX6n6Z})Ef%-tRTDWy!D|^8^EbI`APY;Iu4lCtM~a-CXfiAN&}Up+cW;{Ri3D>VEPGz2 zPHaJe|0ezhCYw0vxsjHV05yYP0DFezS-NOZ^Mb8_@@(fyY5TN$nb*0UyQha+m%~P0 zO+)H18MFERWHXmOU#y-}OT_l}eOMT8AJpBV25&YU<=LlpcbfwOR>zyeJ41=R(cHpr zCv#V4B1A~}EuR@^bj0O!y^+m<%|~)0?&-{~Z?d!#Pm-bQJ?7f9&q_Q~xeO($7(h{HZ~G!R6EZts=e>NRcX~f zC#hAMRnrib(-q^=@cD8cs%?S0bjDf4dSmfpWg&xxM*ZHh;8TRAbX$17@#5paG?I{~ zLNe^}H&Ya6oWOtvr}z&7DI0uf10;M zTRYOI%PH`jljtX(18^J!c3WM}WH>Y6!-o%>3B0GIJV|Mi$K)UH{HVij9$8PDB@}e^ z&TOp@32IuKIS=tX!8`DmieVOih>A0V+V(%lB;THH+?cCH8ijYQF*iSAlm42BLle*0 zvazkY3G+(2icylVxQ%-IYHfwjzuW)nWsngrJq^p8G&J23Io?A)4shTewGT_r%_^Wy zCnKDgkZh{3xJ$#0e7AtI!V7uIt|XSho;Ha0Q-G8^@514li)hBkny353R5gCMi06sO zM)MLopE2Odt!q~SCpsNA{CLN_R%f<25S{a`&-D!Y=95akF1c1%ZAbyIK@aqCv%-Fh zSDoEI)~+(Xz#JQX8H*`jo=F%f67t*_jp|uqtmM`i-aXl~{HTiI(;byCY|R^V`@vlPRoE{aUl|R-=dNlxMv+x=(n@ zU5w9tHeGyR!94@EF_3{aTeZV@az!)vtuBp;riH85+mwnS?O@Ba<(|6chGu_CVZfvaFy3# z{QESke2SnO`}KJX^J*?aGG^K8{DUSbMVXtp1vok;taDzv48?)Fk8HtshOsnqYMZ_i zB(Dh%P8+&7uU_)DnSHEj(Dc4qtF-L~TBT(xq3_oFtI+nSg@v|f!bt5$Yoa@%;p#Ky z1V{~rZ}Z-5pLhLd^Y}|~v5Cv4_|+(PPyrLGuV zP0rW~)69Q+P?Lifh$JuUh(vF|Db)-$!%P-KuJc_Rdi182S7vz2Tf%=4Kj?M#9C2ua zl=rw8radXxq3m3pCrL)`A(PAHLCznyGU?1-m9PJ_z-N3(xrtYzq-D^w8je1%-8k@{ z#Cvc*JP>)0;GrckRny4+ z#regZJ_!{uw#J^;cP&P?e9XaHlG(LEMS#9z-qoa9yKK}R`Zw?Z{OK$8`YpGZi3s{` z^e%}_J15&~vT8qn)$YhjAN5Zx$L4W>WnSsmoe0^BQ5~<^r*97b^ zL`eo3ACl67^un76_^kH0+ziMXC;VAR+FLCv)vjGh?y1!c5Bd-~xy>3vOY52PaC*PI zbV*1)hGpL`YlXl=aPZII(Axshf1t)1zuYk=smVp4jyRY`LhShV;gU_N#UCr*7ob}8 zWFV8jYMH#`duI5N^{>W2!{2)awq0XAaXk#!=bzmU{F*S~MoNy3gP(F)j`qEWpVK_5 z=j;1P8S6$zG9OL0Zd$E_HE~QoEiqW&^aOR!jv>`Q^K}fClx2_4D$2G!vFq)9aM7(W z*E)H?)V+j55EE}gdvJQex3Te8v_JWi2(z27MS_Szk}{**i0tw4xszDqp3GpAC`btM zd=VXb-&S^?>l*ey2x4JQqKq0$l}5jxqki;8c!QMc8#~iTihW{crqo3?(N}HHZEfw; zG&~fY-rby}4;`p#Xduw2{)rll$hG)91Y*6P5_Cg{sd>ey!T|qLt7oHRZ;CMD8K-$n z=B^6air2A)Lg-d+VPWBIZf>@;zLpgQLtu`sw zMgKXi4h1(Pm!gL{>T(oY5H`vmO>=b(D|az%xc#qXty#JDd=DEi-&X|%oI(td1@HRI z&r}~B_m!|Fp}K8FtMmi$I1A-~m6I@VyB1^&w=#?EShU#6N@Ik779}q1-bw5xE6FAy z`|+HUiJU3UzR7`3vm&t!mKpmm^>-2_h?e~~cx;VXka2m_!opc(wS5w`IyFx$)8&Wo_Pal_CS;T8jSqq;tuIx0Fonxu z^RXc7M$VZfsNFwp=Vq9S{;y2Sj{{@b8_%8GCx!2x2XTZ?IQorInADs>#ZTy6SzMajz1o6`B1` zB@aa2LDMAm>`;$30RLT<@P+b=o~=S=oo|=P{ikZGRl?2G3rGTFgjy<62m`m2sCl$o ztB#I@|CsSnN4bFfDAFVjetBM$Rm=$%2j*87Vrp9cj3x>7P_t+2YY#8B_h|Rldj(A{ zBdGse|~@cY~EGWwVtt|q|yze z@}s9`fPS;NIY2h&pC-eN{9%whJ4^g<>bP!m&fB+BDnhKMZ!PNkhPJ4cYrk#w+gE$> zf`9dO-ll=I)5gb7pUnSUXsoVI7#b2vS0M}t2sr3$SXjSV3r&t4IeLTnTvOzx+c4`eobOJue=Y$0|f z@21bC_h8(Pc5I3?SIXj}*Vi3mSfn2+EAQsdQ>*C8XTDx=6@^z+UtZ*ieMc{v&5=qI?PCO{BofMq#mjB5 z)PdMB`MQ;uvHFwW8i$p5Q5MeOU8T${zRw8r^Ye{OR4~q{f2gRImu)%xbExE|N6KfL z>ZUEu<|fH2{YRezM?fFfvTSa$BCRIVM=AS_7D=VlfrJ8wojcuVPBG(9`H7ZpWoh1M zKG|sKvJrFrAQw#>u8eqctCu`4FON_e1?PF7q2cT2hn1;MO!$W^TpDSJ8i z6!8iK1O(PjPI*mDjD>@WPENd|_KA^^MD7N8jg1UZ9beB*k3|EH1ZvTN;)!kXZ%>bn z%ochH;N}GnugrgopoByH{Pinh!chh#0QB|>fs%;#CIu>Y5H&QU2)1aW*T!_@U7kE7 zQaWhBr7*!;qQA8j?~6LoOK*vo5(W?vx_Wv#bEub(*~IMaaGi4(5A@ zq3Ug&OWBB(2pGvxE|CX9-G z&B?@$YyF9*hlhvT>c~Bw2J3pC7iq)is<#)K;+|Xr1Im1J-RC3dqmf!CX$_48&Pc^u z*Vuq@Zh4pK7B8GfK>IMEWt19!-7`P;JuXLGLnDV1K=_vjQ&Nu{7d4nHv+iQyeR?8N z;5^+=At4Jl+dNKb!}K7gI!y0@2U@P3-X2b#cKkwwovOu1vv81P@+o^fl9l-|{$opv z6gEsMMW6qT*IEG zZgrx@TyszQThXrR&p2Oq-1pS~Qt+cwOUUh<{A_|tt<-OZyeMc|u4UWHXl}W%M8N5$ z#B=sz-?ZxN)`<8#(ZFmv4GoACQ&zMF-A;vV!>3? zrJ8~Qdvtx&#>vY5)yuFQ>LNmvl`VsIHE2rBm);YzGkP_ZmLi5~YD@+|m994*muYi@ zN>;5qYd+q8p{3Uos+5Fx$UFCz4s|$(IH#lGG89-P(=aOz`n0fs!Wp~9WtZ~WBZg<& z);!Cd+x)?KW4=BT$~zy7Pv|`zO7nz0zDTL_wS&g!se=Refb_XUxB2_|o}~Dm`H^Nn;hse9*}3lc)v?;x9-hXx za979cvA|E#C46kl#PrxQ`uVK-8CN|C4Gawa3=g}^eOH5$@$jg2_wZ2D)03BJC(+d# zd($zqv%mjBS65L>iw0K*DNju+N1>h0EdI)|){S|_`3=wjnyEI|ojesm%Gj>@saM1z zE;AxMNxW9)XT$l0J+ZHny3GNiy4F0W_mBJVBmz%F;5S}B`dp`9ag47w{xdX`T|ktllF_-;n0hQ+;XKpWba(y2g<<2AFDA#%ss1+$h5+#Sqb1f|; zA0JUz2LWN>7iwyOhN*8fOY|d9OP>IJ0mzvH4@}NB!==k?2k*d@yA4fA`R;I%OYTtc zTlP*hZv^ndGUXuxQ=x;&OCPDhI*863i0ld7jeK-lCkL0qIBsN ze<^uCnUQP<^UA+*$?u*d)p? z>dJM_gb+0=3)5EnxqDJJ9&>v=?=;4qQGg`mZz}zIGsdw*Hz3r9xJP&yELiy%=CnUm zdbN)8fQ?iA;v442duvTQzm@boM=i#EFd0y31qB5-rZHS%5b`vj3|F8ZpBWf*RN0_JT<6}1D*qcNpxPk7EiWf0N@LXY9>-9b zC4sN7CF#4~TU%oS!}QLbA38Pmx50v1^v$aL9Qq=W@Pc#~H#YKGS~Bb1F!#OI86j+Na9AtS zuYU!Y?7GlPr>NAUUA=s*p`ih4^%A5Y@ZQDPuJ$i4`d}Nw=7xQd{rU4?Q^#rwzt!UU zdTw!X#`U|JB+TZ-9C7q z%Su-c0@9^Wk3|?I^ISxTl=I;I_c|{;q%x9F5IyU(*xyE+?-*^Zga>tfy^Pg%n@?yr zl-5h|=A`;mC15T!JegVApjR_@v7oS^zu^o_f=UzA-POO9N%K947o9hMngnjno=?em zjrSL&kjA%ou(v`nYoC8r+94;I+VzE;;MO$-GG?*f%OM&X?UPRm2a7I>1Jk;G{kpoQ zrfIphwXN;HR77!omOcw9Rs5l}4*89*4;57Yrpy9ESDTJ@)2c%VkI z>Y1i9vEnSUxVricgN^H%-#iYv6@MFA8wbUevY>N2+ORed(cR|vA-} z!x?F+8HFh77xiCG%g| za+ckT-{V*zpZUE+#l*x^r_bXr#e#E}i#5j`Ye%Wnw7s%E{r&StK-;w9#fx~B-yVxz zlcwbq(VZXzJ|rZ#95~189BnKuWi>bB!-i2%cxf%52u`~c0>N+9PZ8BY(B)MMK|27_ zRe}(a3?5ie=X!lOQIjFBq+~PHcI9Xm#SJ#L;5PP19Y!htWS|euC}m+#(EvEW5V)v4 z$`qy1LTgwb7ZFAQA)Z@tPbkRbd&xk1UyJRE=rGMWBBz?n0RZH$g6@5jv0vDQ>c|%u z)~vJ0mGJfuWe9x&S(um%yd@kf2g2H?KW1mYB4sdK_)46lrlSKZ0`A!~b{>rlC8hz1 z1H=I^HI=aUD_BH&}s?@ejEP#Vuug-jG?Zg$hC*V9**@}1SL9dgLTJ% zv;=8YGbek$@Ca*fBdkr`XTw?#6(}POn9eYDab-0gK+g=B%X}Rm=Gd%P@86dMDOJKhi6eJHWg0xOerH2htukYx5 zr~&*vTAM4ZWJO&IW5)t`07fwqt;(nUs>Adq)g3k}qF+NpDspo3#?_6X@87=^yp&?b9 z>#+p0)!B(p$n+u%Je_pQT3LbRHqWJBMnQHmGHoO_9w}gFB-H!~)C- z&?XiZ^TrAOEi8|q9W*t)1?vlLk+rootv|~nxUD$_MDz34VT7W|kfqJ|9UOy>_6iu| zw{Ld`Ne8s}>-oR|ro325X%_+)q#N-B1qIzbJ)te+mz0Cr$Vd#SnhJO&6uKeII3s<7AzZ4=o{IuoQh|s zKdZQ)et!H=R8+$D@dUpNayAMH;ZRWn1p>wbTqiz3Lc;Yq*HoQX0jF+mV3BQkm*oa`oSXtNqcg7t(h?w*9r$E|HC+a!E zK}IqD2|vJr8>zG+$1e0SNQl~5Y|V7!s7wOI%$x5OI*%K(s@8ot{H(pt-A;-?pWlY7 zZ+kZAT&u=mOvTGfSj({9cU;IsLt}J%StxKH8S6TKJqi06c_xvkg2)Z}h=?5zpi$!0 ze##^48LXy3b$^sGPCI=~d>@n!PZA{1lW%CsXz&{b*aBd_e@F)SSZ|I+aWbL2n%`rb??m3ErefO&QjyVJ5Wk4dctv z&=T7f*_^E8V;I>|o>rK5Uv{z;h3*3uwEre=D1_E&wVxaScq=QTZ~}RC#098U4}o1+ zq;gP@w0tac&QBYQg%_hJvb8}fOO>*Fd0>i*~Fado91yyM~$o8Tl7BgE> z0yRw1{;{Isn!&J*on1Qy`_C1U*ef!_gyL5g*o!P2>>NIS&LNIMsd{|xkv^N%T3WQW zS|6|X-@R+pvBHGR^M()_h7!!d#Ss95zki|;I*8RE8_g`k>~fsRhMZW>gIf=8(aQ^y zR1%HfFyg1&^trv&$Pu73Je|u9-p2xXH4=8l;jD3+;Zp9y7$eX$6A!Mv!M}Z@Z*fzo zU(c9ka;J8z^>%~QmUqp?LxAWXSSuEg6iK=HEFo z9`nD6-|u?sDa?t6I>vCQc2O##<_NY3(>d%RdsF9W z#*H8@sblXM8AR>an&lVw#q+3$bqXDC9^pB~k6Bumm1&1UO2wIk>@}lA1-@L=o^1X3 zDOAFz(DD6lf5BKl2$7SkP<&e%y(^ad=4)?C_tQS~iJ7_EvYy&I`Ucr3xeikwKbC#A zGQt!#2W};mf$lXy2<{lauL+`k+TDDed<#D;+LGNw zvgMJ0%1+biurGw-%Edz+k0@c$fjIB^363roD|D@$RKu}_uno?fis4w(k5)O@seS<0Nht_}|jT#x!&GAbi9{xeFb( zgcjRO6a8OMqvF+Ty70btVN+nraGGBKSR;8O1thq5{~b7+^NBHTm|E_^Mckk>=f!Iy z@Sf~H?^>zh@5q;zV50Sk+NE1%p%7&Ldm|V|Q6EuV_}{Ny`F{G}%jftFCGmp->JUAO z?;j-m_nVWZ4JD}Ge-&Zmg)BTIg_OVlFmU=g+kb=5p)hlrHn_OFeltOZpMnhjAh53g zJ40>yz15hc21n--;f?qI9q25!IZn?(@&ErK|DW&YT3g~p(ar~KP@9Vya`;aerO(fy z2Pi5k!r-#gl29(n#?7GMXkmZ`wIuMLI|lABI8lsbU7r^EEGuRIjl(veQ*(jGL(H@)sodXTA@(zD!wY(ZzlUk8z zD8Yi4m)@5qj9qgIN~@@-sC8%9Umb04CztL;pP!;%Jb%6&mIU<2`*1$V=j;#zn8TW( z0t6UxDU-Fo)%q?S*R3S+kSE(cCsTydQw-<>g6QaIjKz746S}`YL;Nrbc@Sk1eEL&{ z97NLLHx8+-#1`bc^QXAeR1Qcfxw-L|Ym+FWoEs;Ak!0Wq6ZoP?vk>u=r`unNdCPpT zmS8IMQYJpQ@xaWCRd~XklHYR9$zcT2LgAJz()Gp-sYD(FvB5Mj78elbhlu)xR6F2n zYwAuh-f2EoXR!fEcRrL2!`vDeEp=x{D+6K!z{n0dcmp9<0eiN2ek@rf4}ef+cvraT zEs*5Eog5aInQvEzN(_1e_9viWLZ*Un7^~SrAtk9Jo#x54wzjr9+3fcR3!VKbJ2nxC3^UmrcN^H63L$r$PtbCmjTU~c2}3=! z?(XiJ%Y~)eryD^C@_0V_`WY%5k2)TS`npC8Pjud`e4y3N6_y~NwR zbIs`dX!vjpd8!A5Bcz}J^1#}@?x<`|m?^gx8dGR*kqQt)9`-qD zxA=#bA@#K)<`qDer(j`tLWQ*%B1Ds!Ic+kB)q?)xa3(85ne$ zeFf2n{ay#to4M6;hKkiOGV6fjHaA^EsFfhswyQso7KBNCQ)WD^YFmG%~v> z>on$Z4(taAw=vj^>Y-1Cg;7Q)Gc@CY$7@X+0UHc^x?qRn+~?ipLCj~-nKf(BBlZ&w z2~L67wBAffzY#lBo+_rIhsO-O5^&h?9%WJBjsS-4i{_;VXXhJMQrMJQx!or3!R0V#LsB4y3K z<$XHXL#eqYwPOSI0d+_uOH{{wOTAJPT8X2@oT{p-P2TfuUNCvy*1rWaX-hZ=E9`&R zV`O=Hv^(zF!`*H;?2)m%GF<7sWm?j(e8Cc2pWl-Svi8dX zoe0h=G(Pa=z^vwsd;|}AB%4rx=6sx!U!bU<(4CL(4n#>+>hKo$=pW%)0AfNPjeE~V zH(?|<=xSxXx91cfa4FO*rr(z|tg`-9S9)EA0#AZ@Aiss8p@bj!c-L&(v@?_oEiEly zEe9=0%yEDcd;G2VZW9#M-*+!?GYAO}ZtxY5KZ1!*i0`nFI=P9mqQeauJ@0v~>*E~P z1tBmfd75{An;^1sZOk%@0M1~Q8cJq88~ZlQZ(VCMEuY%*2AFaddD}C8Um62UpNkr@ zrf1KeyY_#c*XOZvR0Y52S_FKocjL*eYmgwp9687&Cm$r`*51wFQ?eH#WoX!A{^!SN zOhI9ZDV#VbmpHurWLXPo3K#=+R4k;@fqz_yvVvewR*Z6aHfD&rEo=gy#eyYBnkEGi zi^G^uruWR%zkmOJH@^=C0Bno)wOVxlc)i;|!y5S8b4kb(Hm?Z}8X5!lU-`q04GjnF zEN88f`{VqM+B54^ww1D%e+~_GLdJ6d>Ns}75d)jla-zWlcNf|( zDgv6G?UuS>`-I(g2eo2#!%J5DG2-ay?H*n$@N*?LTk-A3>*9c}ogG4|q@i($l0JRG zf8#pt2?;C?34SZ_{`&Rnp-`Fyj-Q>(vRM7CvcX%p3ZrrhICmMYAB;X+4aElTutHh^ z`^B$|_$-bR-aQ~eB*ipF&Lbs zL8o@$BlSmKzYC7l%*OfI#+RZZMy%f<0P{c5j}PZKq$9F9AwhTx3*Z9f<>uG(<44_e z7=w1b>t`Ke=c(2UXPBU~@Svl-Ak*2-Xo;dhKXD{rh!RD0lOMQ#d`93dJONR|G@zX4#B0*4+n1Z@?v7d*Kr6su@RV*=G2mM znV33x!vty{j085N#7)?~ZzCfk6&zFn+KtZUjp~k;3w;LsCfgx0L7(l_9?nXinL*~} zGZVovQf)`m+}sR`nWuj48eGAo@F0sU75UXwuNwx#^>go)yuqV87%UC!pg|sVn6Qbo z^La0S$%6o|>HKs9Gg5BWz938zl4KN^!UEw0c*E}p0{1FEBqsg_i{XW;WQP{=NJHwd zTeSjW3*a3|JzHRp#K<%Iyk03qW*)CMl0#$--!xWok2dIhKWKoaW%Dvm)8JIg3kTG#{Yr4E!VDG0uX>98_YY#;^gLLs?O|)qQT-i zrW~fIlz%rK}hux^EMd=28Qle zKkIP?JjwJ~paZYMYtn~fcXt;D^^iZs5;A+g#NGY)J69RP?yZVz<^K|KU!;J-;pK$F zo%GxITu>01BOmK}e!4%q>wCBeIaQ3q0!3*&w4sWzwQ(G#;W`AwM7W4(!4A+K*GypZ zOF~V#!dQR_HdD+alI8rMYutCG*ncyGMSxrY9C$A6vX{6ncXEt87f0nP=aiJhWQcoh zr=d^6kVl2c8NkW=NiPfx`d}pv4hMo%?Ce&Oak&?Rko{B}Aq#HxL8+B8SI$|}5ILAOG40dFhuibu(`@5*LyAJevY|(wt~u48?u{L`5=t3oG7kUwv-vAF@B`vxjsp@V|nSn<(;EmO-)r>u6nkv$~>ox8|`1$i^iPIevU?E^{*XJa| zAIpP<^4tTE6hg0cX(ttaTVDcn1>1^GzS$LY(ls0A@$i1iw~c+(25cg*$!0@0^i89+ zl7i*3kHP*UFsT?e+ZBuavOf-wx7`D8qL(ViQLB zD(y!rTuLjoG!m-qhPQG13Ggf(cFTV}7kB?~TVny&k^B1k7WM?e9`1ss943hX1`C3u9tskM;q6DtE9N?8U@6kim zEGQWr{Z6);gSrnm-YfT9`|IM@-vAbJv2I5qw;rTKn1iiZ|05KFxmM9}?%`uKDi}WO z=0MEpp^vD6%?u}Vkh5YS?FHa6rtSRnNN?C9`&YhBF+3aRvo~sGV{Z?n@8{T_GC_IFl)piv884o<^`E;htK#$R3S(K|27NCr#|SUdPU zB;oCCkQT`|%U4%dLw$S$goD?e z>AQRz2xpiH3`Yn$%2$+64iNLyy~O>%_#$us@X#zU{TVpAb+T8BoaaXz_LlW~g}%3k zxs;$C`5*yD`Fn@~dB{4-DDT5VOt1~Q7|Zg0-Yowa#~b$~Ib`u|x}&vp)Wvo_$g*%a zZKk==II(WhL$hIjZDhk4(Aa+ppJfVmoh20Hf24H&M}j3`S{9YuJ(+d;K`-!*)$dp^ zKO3;P#H)<*o{N*mQIXnlS7KnDpFV$vz!C^e;{M3KL4?SyizH1b|CJ$qtNj=KTje-^RW=#Vy#i_0#Xh&oSEHDs? znC!U7!vH7eW`PO~bm@n|=q!6(!EiG4*Mu&&P+o$<>i|KTAGa%n!l=P*78;g$2DQtEmj7@&;d3N{d*D8XvSyeFyaPSgrMVh1~q1M{C60nVwBJAWVo!_ zVVCLmAF(ELdtghRK_gCsDaQW@Kj?RrJ5TyMS9V=78D85sxbxe0w1n^mmIbbuqmyfz zbV3RyyZ?<#c0Pplgmw=&RqEWufadq>FdcB$7%x0Enve8R z0zj`2QQ49c#_1bqDCx zAz!j9sSiss^o@W<3LUO*5bMpu?$FHd-Fr=OpXxeCzuCkt=gKJ zLaSoSknBk9mB(%!%*Iwap+m80X+XbIbV~kG7B4gv1@EI8_6d zU-SYwz&YG)IF13VKj*5Q1PBWl>$93{@&OYgdH5Yoi74|O=2$Fz%Xi>wDf@~;%aOa2 zV7f9?j5`j{3z8Lb7x4XNUF*F!+X%ZPZrg)&JUiY%ltue-K~}K=vg8CDp&JQ`(Z|ei z5K@?nH87Yc8&FiEnmnG|$5GsS$R2nKgT}}|4u&DR+0;!HpClZJ_i9UixQTu&7Ib#v zf?=TVB_$<2SwfuMmIiTUZD%)&1Ex0PpNs)^FiUkZZ*=x~bYXmCTb3`gMIj=n~`Dp|>?ae*q(_gkwz0kO(qbh@n76f8S4y|TxNK|}u5H#Y7ZmpY9fE)8VgMSK56Hwi_yvGd zQdQ|wfphfv{<%vJcP)4sID-zvS6+GfKM=Fq+3}C*hP2%Pu5bUhDgw3wj9>Jv{NNzk z&O(fp7&L;B194BZPCVb_qIKy07KilVRilHiG%#YN1QSqn2?+^c0&!8BZA>;x?2VY= zX2$ek&XhCqD_s6VD2BtMVPwC7*F;B?5B3>VN7D&!f+8uy!Gb-kqx=PGfshm z*B}>h0vl(N;%*dM=Td4^kHP1B^V*=cYN%;CxB&gjUDvQH%{9Ko9hN<`Yh! z`@p|y5Dpkp4sKwjt&c>giorYHL7djZwP9wg@#>cMK^pQfO^tQrcH|?lwb2Ki!rstW zZ~zT6hL9&_a}xb;{s(3k8z==;o@ftLIU~p>sMWU*q z0S}>NI2!?8f%03xam1sQQWk8(A&eon91WIM;PfyUP56gXw{PE`29s$H>?+}79dP+z z$fsYopc<$$_|IHA6|ZqS7N^@s%wl1NEHZn_voQt48m?5qy+|32E3T^gBXJ0JLz6!k zwjTc2G_-)zSOaMJ^(L%J3%Jdx2(Y7HKgx1BHhimpHu_dS6E|5v6nz}1$3?BEq=Xg{ z=KaTs+v2;-Wv)4yaRL!Mj;Ra!!}@N06+l4e#DgPzbKl(7sMAa8vlP$!$upkgTjcUJ zJcdmwrMyj0+059umGOuB+>TWvizhs%kfEX~!oK?q#vH5#Y$wUZDXzQ~6Jd{6fYF9F zW9R1@DWL(I$EOPwrscH1tp6}#nx1ul4Gx|pfAHekvKA0q8gN?lg2y8u{J%f;`1;!D9Oa_!P@r9E)Cg002zCm#| zXLLGb>t;_uTuwclhJ}bMIPbtyAah-~LU{^L@V0XWBdlD-H|% zaXnh<8m+1}14&i-D1$iN<7&9YM>ZP68FXErL(*8QO~ibC5z}YE!!nzBO!H?8LmarL z-|~&$S&KxJUfJwFVD|5f9`LC=$31c+$EcJ|kE>g^Z+iY}hnxTUDScT^jr_2ebIS!3 zwOh=7Xge&@p0FQ^5w*BUt7dzC(T8nU$sdj9_~96lk6aEX!X27;9334eaN*h6kHWP? zUo9s$Y4yyHc+EN%bQGmRNKtQ**Zef$1h71#{XMh&mOnsoSnLn=Wzp4yIy zjQwXj77kERkdolaEX>Uxb=mH1M)4Hw;*fsqxSilCcZ!kngdX?Bmy`d;{N-P$!Rdr- zLtq*}MZdZejOht*Ans+^V$ZF7pQnb|621kyqUi)DcElQ84++@4p+?fem@rN@S^36- zCY^~j0eIw-(gz+mk*t^@{I}&0X~?OM>hT%yK06W#AU<2?dGYs2H0j~M5Cn# z{4eFT_3(>cP@++N6F;1rV>ui$GE*f|-jJGH$KhMOU*2$6nM(*mlIvx$ovPACD%^;5 zFmy>27xL~MmQHJ$5aY-^c~{JV(vaX2MK;Jio38fnpT~Mx(n>w^-E4Xk-53_jT`L@o z<8>C;>q}ab5A2V-Qa|WwqUH4}Ir3b3+PT$T?lUyfmsm-!V8C*D?v`qSi}GGmYoZ*6W*FGlfKs zx_S*Pu;SX<{J9;Jji@hFYbqkQ&L8`*e$SCb_IKZ`A~(V1u6~PkgXIpvb>|?e;{P6b z^|AY13w!HkhUtfCD~qR)fVT0?<5D5G?)>g83b$x3at=k)x;J0Zw`pn*dlTI|7h2;G zBgSLWvCw<Ayj0?{#ERq@w1t{1`hs>C61= zQh-@Dg)!4PA{ppMTJ2}E@P%Cd@r6<$Ud_O$EkCGRt3tcRmfqTGP6C8S*#jF+@!AD45jq0@Ck=c!y^?qKt> zoype1##zrTNU6=>->+L4MUE_NLMp%ROg19RZk}?Dm{v6uEW>MDoq^5&W(Q+!EC`cfC|7p(C+B!q|LGo`Hov_jU_HzoA^Xa@jO)hoyre-^3#j+=i2)EsL?-;LJb`Lk?Ch0)8tjr z-4;4W9VPQk`SPy|?*NZ!$GW0!^6QZQcw8ol-l){RNSO6-#A03KOd`W_B9G6#3nE5o zWuD{85(Siu`!0fJKZeYi`Cg+laOI*e)IiB?2> zQRY_vai@6;3)cFfK#Y0Rkc1qF!)F$M2nZE235ss#`n;Q#Y0;u`jUSC^-O4Ip!k64& zhJ6~cB3j#pvekhtEjn7Z?KJy+>b4JyRuY&iPo~$h#Gk|yz+2VWD8wQrxG`}Z^I8^C z%%{+r@`^0?#oQHG-RXt zee{uFATr^_5h{4zK9 zW_EFAacRdUGMt*1F5W1vWGHUYy53>GL8dY;B}E|FfD`lpVc1+fGRt6)55$^V^J*kT zYtvy4j1Chh;ki;wj}K=B0WE89uYcIX3{G2?bRw3kV>SJXA+zPKy~iTZ3*V0xW?`_< z=6b6}XWe_bo}{xk>E`oHE@u0yUVi@kkWbZw zO<@1iO1*Q3i@t>Rn3%cqxo+D+mOhzII!NWvJK*u=a!ZM%lu=LP##MT&1oKk#dkw4EzAnH$iC9vl7o!1q;2AuWsuRd|M}-Lf{Wgi4EU|1 zzn@U90`94POM$geE^baYd)3v|X_%0`fX z|6Km@O9!nuc(p#5y+R?w`0Qde=@^2m0)C<@BXZG7q5+WpMBuCNh<69pK@Zb7!Wm0` zxHqN;Te$D@)9Bs-QDg766fU1}ny#8tm-3r7xp(^HueaeU)o7n}5qt z5FnbaaDe%5K14@HBN!~9A1`vOgbxI;yCVHHY zN)uNN@yq;odu;Lmoj=_ha$78c%LVxhfQGOKhRtFvkZmwqxnhh2z)}~z5&>Tt8`r`@ zJQ~a6!>R1iNQ7ccPL2?;`2|~NLQxMs9NSpnpx|O~NwMS-+y;bN#J(O<0(USJc=t(x zYG?8eN&z8&j4R+zh~fd#K>_$|%pbSn2lf+C@6&8}CqQ2kE?+7co>t;C_zvaqpz1yF z5P?mv#t03A%%yoUePuKaRNo3(#L)1^_@)7&Jagm$?ik>^Lf2js!2y5Y(c>${$%*3U zjYWatzNLK)pOS$vHrfQ*0)fG$8`a=;2$UIk0QVUJ(j;ivHCtb6V{mOYyCMuVHDG(7 zp)F9FBOwaHFH}^xD3y)g#(WCLcL2gCNMF1&Iz)K*WHycnLQ{XPkr)gZ%?OEV?b>fzX>5{jrj-!mh1_q!o8;TO7Pn-qs1&b&Rl(GcK2`dha+Raly zP8%k_eg=eP0YA3BJ}jKxurXwdF#;1rXradWk$n2M0Lv z6blTXfI^@Q1AqyP17doC#Z?J<&xUFPw>4gE)RMpkR03FSFdiY=jiW|)ObA~#4fyiT zocKIc5d_#usQ&pW>Y3l9Q1*cefcmy;Fj*| zX-6CHUQrDYCF&5~BrfVa+_qTPe)+tinZTr%hyDj_rM|s=hCTaLV^M;dfRqqI37qU1 z0Nb0GEbzzUZKIO9eDnoWPbj`HdC}RUAcNa{f`S0}wR#VLfE+QDSv+bCloMlw{tP04 z-zMa;gJ3}+Dv$yubbhlLp~1p%!7{tuoDKW7X#)xcF`b09mXfot%pU5=@p95X1{3Re zRHRv^4-NVCYAl?C`xL5UL_WQr*?cARINl7fCQLY#Ug#>3l#I86_~AV=WtZ;B?u7yy zmnRZ{Q7^@zU{r_I<`>3?R0G;Y(*sD8LL@Yr*kprim|Wb!D!lF!7`%!m3Rj!l%TPnH zeB+&cNPP=cw%TQoei9cpK}H>XA7#kBv7mn0p~waq$pw!dI2Tv@)RC5T^zYW6a*PRL ze^Mdy!nf?t7gJJn2Q)VF&uwHIn5{Q_5x;&jsC)$GtW4+YVcaa9VN4HJRz72gbr*TM zmyQ_EKF7X8ULWxdU5@Cje zkL_J`HfULDLEV^t#v`Wm&2$vXrKvWdmMssQr%P(}WqRNzuT{VN(!5Vy(U@__zLy?s zrk8y}&goZA>eJur-lC{c)Ivuep4IphJ74OY+i1j^{+G#MbH&lOX zKu>T$?s`YYf9yYyb3^eQ%^ z$u^ed9L3z?4Oq1spP@c$y}s``N)xn1`9~B^vcN*I`k#9z8v2eSSZ3Ri)c*S+$Wwk9 z_7IBQHJL54BotKT_lu>3r_s9)k-Lq9pMPjTt3jv`3JNBr_olH7U)DPkpIG?^RaPbJ zvoIDERMsIs6-Xd4@s~u z^*X#I_q*j}PAtjGB>EHQ?{%b+IWd%uKe}em4)WAYfaO|EO%_BxR@QpvNRCv;HNt(3 zQbb7G%gfm^oAGwCDHKMkEJhe%Mr4eE5(l9M=B_y#e7u0yN25)usOT;n*r0PNKtu$S z926X^3vk9^X~(jZD0A-=q4SKv0y_G#0xJne(`FguQG#sto2G zTRMU`&NAJMC{QGE!CsFAoA|G=m%}>K%o+r}0~3eT8?fpK;c538fhilX0mMxe6&LY1 z(Jr=tBt1#yB$lVQZ{0EZ;CgoFxrfkx$=|DxQNMB>tqSehH}_yjxws8dsX@qZqHhg& znD2qA2_#Y$B^pY6?0BTMt7BW&VW0h+o71NL<(NMPc$VpSiDNK#EIHVv%ub33F`ZE{ z&0h~$iP~jlqn=B7#BA!D!XkxX8GN4)@Y-#JS()Q&M9Y`jh7L&+_71(GQ8pbcqx3;1kp*r)ZK_g1qwwF(Buyq2$ z$&#-|3<`pe7X|XaqiFsUBUqj>8a;@auull-*Bq^1=aZXRKq_ux&8m4|0OTr|E0%dELw8r z)_?&<;V|FFLi>U%RAbiHm@SVNl_p+TH)hmv%9Rqd;dCm&3Z9iuFQR_FIArgo=6In> z?ujnAMHb(b9I^4#()HHy8{E5Toy^&eQ9?`!(s47_i|%^Y*X>HAwI50oM%_IMC={c+ z_??nfhnH_s)Z`2Gl?*dG&ZdXFXje+Iv{u^Mr7lYRy3Bd8gp`&3#yP3pe6Gvp7mrjEXsmf;Qe(n0?4Ui$n} zl4h(7@jyZ=dAJ|O?Cy?|O5zH?9zFV|<;5G%S8rVHq8#<5s#q$h6l&OmqNDGgGiKjr z4*P9Or7ccNiJPO_a&o4%Rp#WE)!`92HB0&pvVk!%7tWA8e_2|GgGQXg8s5Fp95+3nn>a0Wm7lv; zx8RX}g_F@Q18OdQ)WZYc@H(lsagDbmwSdaLbHfn%!y$jd|NpS28DEw?Ej9fJuw#U#qV6l$2}kv$?sN^GSfQVD4}=GmU8iz)75!vw`{KK zg`7r7`^;HWw$71lTb;Fy>Z z8S&kbuJYS8Z?RmwMxeX{N1p81vi#F~pwm4j;#4tyEJ`9!&n{5c-;Er2(AP)6>Y%q9 zO|ZX!yu1L}5C4+IALNwOloZwERRwhQEUi@bIq~5r5#p%*X(+Y6|jdN=lNlvTCxjI@_5f|IGp3zWWclhyCLN6nM+hZ~zx^21{S}z!0*(8_fY9 hUvD?*0G!OtC&0ruaC&8}CO$-CsAsz4wvNm3e*qht162S3 literal 0 HcmV?d00001 diff --git a/doc/img/collab-step-3.png b/doc/img/collab-step-3.png new file mode 100644 index 0000000000000000000000000000000000000000..2230adf940481fad148f8432c21568fa8bbf3a6a GIT binary patch literal 47581 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 z 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 z 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 literal 0 HcmV?d00001 diff --git a/doc/img/collab-step-5.png b/doc/img/collab-step-5.png new file mode 100644 index 0000000000000000000000000000000000000000..bd1c02e8ad6973bc105f527fde665ed1fdd7b76b GIT binary patch literal 63579 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 z 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 literal 0 HcmV?d00001 diff --git a/doc/img/collab-step-5.png b/doc/img/collab-step-5.png new file mode 100644 index 0000000000000000000000000000000000000000..bd1c02e8ad6973bc105f527fde665ed1fdd7b76b GIT binary patch literal 63579 zcmX6^2RzjO|5p@A2u1eF$_m*lWUuVK_uhL%A%v`xorEv4GtSJ8!{O}1*?XP6{onom zj~+dGbocq(eeOM;ujljmdcLF8Rpp-GlH+1vU_4Qfm(jq$xVHoTYT`TuuUyqh`~m-9 z*}heIi-A#<@c7#N0r)?yrM!j;21WoA2F8a^7#Nq}r4Jhz7~b3%7+Yo-7{cE$Fi739 z8sCe8Hy&Cj$;n{c{rmI1r6?J^g6*ZC@(z0q>p4Ch)0Dv5|G>={3NmlC{APA;e6y%@ zeNeF>zS`MYYU`B48?p~SOL7wk3B4McN|L2+L8qR01ykjeS-~J>XXukut6+8*WS8RF z=^gxY2Bi>XQYQ|*4+G}h6R)97uUyI!hc*dSNrB-xJ3`vGU$0<7AH~b)X_gw=4gV0=tvkDTHF&AP0$yFZ8PNH3 z;j{1hs(JgSWuz_hq!`?Z+kF)mC*zkNDsUC3S!JyD%{8Q~em3BS?ce91LoCD=jc@h` zD^4JWM`t$ojc)@_l$thC$Vc`6``&$Beqx8K!cf=e`-U^9A;pP_3*VD%8+0p_;C~M` zUop!*R{AdB#8K>CTLFRP$JALTZO0F-TeX)phdiZ7*8l$&+uClU=N7RPQqE-oscBD3 zXUfgR+UJ%3i_^XnR=g{(t4mES``@!(PSig6CYg7<@38w@r?%F03zG$R&t~tS+DsSg zvbZS6=@xZ+i@KB7*49q2o{mhZ`>KJ<`jj@YdNxGq=+Co%L*th~hw+oJyDdTzm+mKF z#+dh@k%7_9UGm+vX-??sxGpp6mQ&u?flVTpFVj8u8tvwpM$X5z_XO`PALU*d!Ci0G zD(-xOjpveyHd#t*{x=FS9JE;X-+xQb4%|JvT_CtUv(3H942hZWX+5s!ds2UqA^H0R zE3lSg_I-emp@Bh1=xx#6vZwxCC(MP+sEPkL zwe6_e^ip7%m>5R#ph-O-wYOF`*2fwzkl~f#D~|mA>6)g3yw=m`YQ56H^FRuPiywp} zxDS*O8U*$P+)^J3?FF+{KM~6R#N~U>vPZ0;$d35g3N9B5Jp27cO_`C!q3qpzUs${C zGhac0chRmk_7rv27tXN5)VZy#`I~uJjJlMrw$J$QJ3V^!%Kd&j z;hWl8K}!5p^3V^78W1dz_Tw?ekcvNxUjL!0rQCDB;;uq{=&x%L? z$M_q&44tQ2*v7wNt4Pm$X>?pWZ>FeOUxrD3DDHd2j+90GZraz%^FuK_eOa3<05*{N zkFW2rbrmXM6>%D&m=uOnvt#Nt1!GpM9mhWIh2a(?M&hQl*?sgF^}TVhP04cN0s|8h z+L%2(!{?Y;b$(pLBuFbyAtP00Xb^QhETS-4#AI^!(%|Msc6+M-6!H?qr}7gks?%>$ z6axnfV!h}l7_+Y%-LG>W&QFwAEtzVn(f=kl6_qA|+%R8UgF7{Sv;593UgxZP`BfuH zwFvDeYM0>yoq z^FJ20)W*(8(Rd}77K@y#c`z`<;dZUXRkixe1A2c%{xdVRm{hRwVB>C)jZFhTpR#yv zk?oa_K?Zr)XlHxL=5qLwroshlVNkwek!JH@Po`+l0S0p*{BR&SVe#lv5tf#}6bl;~ z7Kds+Qv5?xeI|(^2)ZRV{_lKPvzJ_&Z(A zDCKzBdcs)ttZCf1{8`0#`Oyj1hGM9Mv~;JJGg8)8PK1=p*e1v$X#(>6bay(g(0=8} zKR#EqJIA<*jDp72&I$`zhrS95I@l!O7UPAjzS2GL6QvaMAVX9O1{adDzKkNEVkE=C z0BCkTM3A#gOml&gr(Vf2s=>o6Huz`Z&FMZ8HgztTZ@J7T@TSW5jFZ!}rGH~ea9mrP zQrzonLBY!acuwc0+rhzNC)UTXH&>2*b7@CvqW(Khc6J`W8{u}z4|}`DB+ALtP$53L|H{jIR=tu2SGm2Y ziV)B>^MwiQ>?O>#jNGCI_juPcLx?>1-h$$)u*(^PH=2@YYV(s8ua6X`RNw8%d*gF0 z?5t7}f;a42@2+EaW=1-(a|3=@sLzJ8q_+tG=+kp$-EdOzbu`hyWxNlCroQ|{ORaXe ztc&_toEN`Wu4>}HjJ3{X{4z)WP&4;JFj4&=a`pS8!a`d?pKC_3Ipk|R%+BGyRnIPB zg)DsRun)OGt&*H+`DPiP?%%`f{I1SIsK$73(Jar}_mlS<n?ogv|h5FOaVby+n5ouFxz5=!568 zI%yZqP{(`+&k4<*<7VxN^v3UTUWd>W1;VTHZAB8*H+uZ%77U(AedSt7&&Yn6&N18Y zTQ`nCE9&D|#SAlD%tU~b|BE7o0{ipj^JvW-WKCw8X>gg{$^9~p!RFITiZLx+#OQ2S zdTWj7*>!@Qy~~f4MR{5{3CK*#!k;o<~QY!rx}8+7?snWa>T zi`!_7FW+_yiOnc{{YI>F_<%b>+#_YPm{qp7$A4v!VY{hS;EE$QNtF<<1zMN69o%X2j7PW}d8PyBGifn_;UH`pnM?~YcKxVxgc#XjAc>CTHf)fM&F zb`58lvD0wTYP@{TPrUOcWzM$V^N0QYOYDkepC-SZMCq(OF*UYSS)BH%E)rera`aRu zc9pLGB{D^I_~9D+`B=cE?HgMx!w;ZS>zn>1O{e zzCJ75yhr%EDBUW`Pb>yHq!mWi0X7gfmaeFr5TdBg_SD;ZGe`rWN>?>&V`5E2*48dV zF4ypsI=oe^Nzqd~Hmck#!>DxzJ~n`tC;3$_ftsnVdZ3TDl9{lvrVPMoQ*@LN_69ofOr@NLVNIJJedD?Ni4P&@3L{#!pUwzz7X zaloe${Zrp|M`=F>LBF-t~icO7XvcH^?+PX0IvVjE~DB zZ31i}+fHgEFo|w2OHD1Uyix?_MdR%a1_rrEIN+l~Pvkm+mMm#jn^1T6Oe)f-#O46u z8OmwHxbJi9#mmnh-?{i_{bcM1vzCg|Z$OqIJ%mr?dW% zva-W(;?zQymX%di(7X~C#DY|+t=Bs!bxqCAg_G?ST>oZjg4~NSX7?r|jFra^G>ZAM zcbx|UTE2XVA4RlKMVS-Ea#(IWRE@$kRCIzhu3igLKCEbQ|B|=(w1=5l$jj_5a(Rs6 z2J&t*BcXR$52C`KY3cuR2y7$#&M?%z^hM7z0-g*)qXw_^M6|p35jw#8jP7Z)J^Hecmg}^}&k?rs0%6 z8J{hM6Q>q*j=3{EtrG0~rr4`-%)F1vOi81d#HEPX9x0FPfh5VZ$QXL^UIgWgpdaC0 z+^2Fb3))F1;N}&9{hcDSg`0Nmdc5Z4g&p=QcGG_)@-i-hRwZU^IYi3IDirb3zAV-v zPuuQk{F!3Z9F$rfk1u}OUi2dK8zZ$^WxwO+JbOL?esx{r&VvoIVyz52!4A2c3yfWk zK_e=%mC@7?VI=bWJSxZB!XpE~kXIhMD__pu-r;9eYffVZd8Ay=a70gCybpewOCi8* znC_LmtMei;O-N*4@e7M8Yd$)^ttvVDUlq1aLHFG=Ekm0~HGVjf(*zwpvRPmAKRFS& z0K1W%>>$l(>99v(et~|}oB7s_c+u`n*^`ssW0RT`WreMEkrO=+rNaJXJm#iOKuGw- z!9%u)MNj{ZP*^TYEu8rMT|dIeYV&)Pfc%KsU%wzV`H|O}6GR7J8YL>U=Mj*AYq0m6 zIwL7wj_z(#h;9}k6uY)$}Ss51Q=85w) zw&~xpeiRl)g5gT)BjFev{9X5(n_s+r_WJ%Pge)=)u_=k*Q$|=###05|+Jr0C zyg$4&eh&G8-ArxP?K?Y^cNcfJG}nuv*Ki{m>cvddjdscp*Y?@1%D zYTt|-y&(JEQdY3^L)^VE?K?`%QaV^clo9gsEe>9% zZD;PDsM%sWU2jX8tf@Iw_u#&RV+mB4Ti!O%(AuTSTK^j)VwjH-Kc8nv-(+8ky{C^i zcn4Jzi!LtKc8On#oBGWTz^hPytJD4ip@L*VQAX)B#Ig-E7+T6fq zwL!n&Oo~`A>!B10jWC{c@3uF?ZrQnji=4ZuX~2oMgQMfd%tT*oMYE#!i5k(th0X~F z|8D2DhxtZ$5NA|MxEE7`i~R4=h$dl-{%WVg3rZ;jp_KZwIBroMMV@r45c9B>z*BC& zU2^u7-9Q4rSKipn3L1EwF7K)UF?T~p=f%! z1WG3II5V<`_)+ZxJM7f;*incu__lRO$h|VJI2^2-j~@qyhH64lCh^ol%52#-4gut_ z>Pn|fbryMUGP59yBxU|s_;&ZA+b{P)$BZ683b>k&Eyd3e65U;0j1nQM+Ty2)1g?jU z##}n>h2?dTcPD9grc;pa+-r%uY@jjv^DwX6$ng8CC~>E;&sS zqH?c~ncbR<|BmmWI4q|5)x^+x=$tag>$$e0qg2$M>}|hFh#ZB(fsWCVBl#SsYmBo} zovUL}epy6SH0$Z!Ui+fgaNr(&pH@aMjZip;t4z}j#0s@H$IjXPkH&+|UE?Sx5R#iP zf{y+%uC6IfpZ;_I`rR5Ssl9{K_p*X?XR6(-7Psie8FHT!uVoLBbVI$aRUh8^%FovN z#{?$Q2=7mY=7#_3ZFOZsmv8RXQNJbbem>9`E%aUCR&W2n7`_OCZ4v4nicjqcgJu0<9;` z!Xm;`wVv3MQF7<~sGvA?78z%iH+ReMJ0j^x|J|wA@sz?{sM~9}MFtaRTJlZcSssP( z(c{NK3w_L$9I;e$b4E1eORwO!PeR&qhvI#JkV!BNeipU3@OSa!Cu#H6tB>n?dU{$SBtcj4^rzaFgm(Y@|M z*^c2u7`P9TnQ20Q2}X*E4Q@>N^{LcPr0W#3RPGf+$Qs{z^M$7@xHmn*{y3(iYiXeK zng%-R*o_(g+c`*_M&hhSB93suP0$6)ZXSKY;l3fP&ezI^HKX#Hsh+m(pilVmFWo%Y zy#@?{1x(Qdv4G>eyK9=ea{|nJp>_xwN7icp5c5P!=Bv+TzrH_;Qy+$RM&S>u>vqQd zx2{3_ezwn#KFnDONR-CHsw8={jfdj7X~ac=Rm#c1fj&A6(fQlL?H_WT zICUQ#yo$**PKT_zH^u5uYlZ)HLU!yQEqe$lFeU>f>BjxJ(EcZH`VYxy3z9cUOIn=u zkLzLYm@*l31NM&s?#VN10=g!ZN1H)tRXsgA#ucZ9>1tD{vv*@VYHAO0=Xmj=(u5}vkRBGA?*5jjCzS_F?#>OpcKbp|>{~h}t z`3lH=CdG|V9M)$cV@!i5%QNCU__)zHq`@9(pFvAUiNA>Ui+THLnq4(2-$Oje#I<1G ziC?LCEDE+NrKtbn`J)H1BMZ@1NlyH+$ladxlk%q=tS{4*A9iwsQV$;bC%d@W6yzOS zcF#7N5bxn@l^Q{rJV%+1Mep8EDhS40`0`1BLJ@*dv-r)nvA+J>`-|#02tI|vm`O!O z%5uH_)z^1g!Ybmqz3WGd9>P`Zu|}K;gbN-}Hj}(+?cgJHtH1E<;QJClPj6@SOX%tN zRN4lgF>H#2R*}3k@l@)9N}<1Nwnnue2=b&P=@X4EuI>(KZf2?k)Q<1HpnYH!Mk(N6 zqZ{*K_U-Vr1NID4ppM7jq?Rr^Izd#0Df0nq>`|qXK;g;dgjcq_U~}P_2NP4?vj>Bl zXT;GmY@GJSlf^NziUb%QbN*!^xfO@OP>uKK9*UA*N{Z1a)0{f(pf(dz@!a}qXYpLp z(9K}~-0Kk2f`tCl6eEa9?wM>LtGgg27!Acx4aJ}knp^J~5g-(Je3j7Lvp71{6OW9f zTy_qdU(=jVWE~2qJ>Y!&wR7>i%XrH7LrkrUV4<(2%?Z|v=yGA~kX+Zn*KSR7&&;{F zXpFr@@7)iPXxFyfDqVl|nC<{V{o6tD{ch5})}NqGx3Y`gJfcJ^DENxDeONNwfT zoxt*NSa3IOeOzG?3kd=D8O%_NT%|4l#8tmi$#Lp%ep+LR+lw*;Rf1WQK8#{}`s{TL zI}nv&lE31gx2qbmNZzA~N^sBZ1zSZaPMz>J~a5`S`Q zGG|kBt5aY4%kpC|)VOV1LZ+YNtj476kbe@sTUW{>isrYL;>E*6Ru9*I-Bf;5D~0B# z-RE{@@nxGb3}IT2hamgoq5V2*EnAvZoZ(A?|1G*LoLufjYghRB=Gl|CtAEzADB!`? z&bE$N%C@%TwY1z*uT+|i%4{Htucu*sc@eI_l$oDbRs1bw#rSKeq5FPuX{jw^HdCr1 zkiS~0?%=jHj#=G$_Nfc0u#1S7Jk!lY@G}-EoGeb#Cn|$7`6K) z&;LbG=bReTHO2POhS(*gbY9q%V`E25{-T2i54+L)KUzxA4`{&buQvL{s5{{6n(^S} z%o*X!saZnDC`5EQ#nuvNoWwK%lKrVOY#1vd=$7i~Zj*78^)!j{V+7knGxEmB&OBFE z-FA^~v1dCcJd$&p_kJ}LKo>2h6=_m^3dX*y!uvU|JxY4wW?n=}N7sV(!-8MEL8TOq z*PJA|ho(~C$vTi@Mx3#d3#Wc;FK+g%XmpD%=1P244w;ITpo!sR=MxJWp_CSGh*N|| z=HV$y0T~#Vl4QiG+oydqR4!o3DhAE)2yrb!xGOcCw7yCyluJntYet?K=lPXR)eRmV z@@#r#%+H%#he$N}?)NOC330Go0;z0krr&IO?MI@~?z1ieZ%Q@r(w<6vr;xRO9$xEm zbtvZM;E~jq?mt==7TIO1_nS}Py`f=K!BrbTh)}n$q@mZixi>4!b}lYmd}YWjIZjt1 zH5;YWTH543dcLsUT_#g*eTA7%*Z0$oPJ0z`-g2ffq`?72-oLn!S)aI1TN?X;>;tje z@A`Uy>mB&*fZQDCBu7d0Y-K6?PMk_P5jst^(BNG!oNPaN=LE@nd z(y1wcA$wdLJ_Cw<(e0ZIeS7LF-Os(mGW6!S5%+IyZob6FFQOZO8HxAg2`?X?R$pJX zYLQUjDP>&Tll_hJ;5_w(<4qHwHzsh(Qj%_O?^RE;OWFNIuqO2});TYGKsWYjXp7-kM8SJ_%VXx z>3MW~cE&3p5H-2oz3Jt#+W+h!Ha7Sr^n^HH6$|uCOy~#?c)7XdMX8yIqAQ!52bPxT z+s(du33rZ-k!UDhUJmiRc@t;<90!66`4#1i1iys`T+W~Qk_2}ICGqFaAB@M3kGkpU zI47xSuKYxYR#q4n-N<0oWG`OO5#sy`yp4*A8sU2aI4c;H*Lc{}37LtBPmRFk5{#^S z@td3Wt%s=<2QB--39+PHqmz?zp`j881Y&2VcDqjMI-lm|GpT9N(=^yS7Lov1hqL~3 z)7!%|eFFoF^`Y!ccGg5l?IK=EU-YB$cn-IT`RWHN-&Q5zWV+-&!Z;cJ><8xh{AjD^2sWMH6x7)ZrKkYlV3d!jn*tDI z8ULQvkX3*7$04KVEc9G7^klVdZ6u#yncaG0_OlUZ+SSZt>*@91zkl(%rDz05uURJ7 zQ`{2RcMesRRaAHd{jziRcKP`EW(BpkNtE?G*>s^b_rN?)TTdJ9(n!*RozdtVvgtTk zezdG>vbujeidr0&#+ENYTwh7ts)6-efv9P5M4YbL9gHihs=5c;eapSvDT4Cz$*|WA zsNJpDUi8$rO5gpV4fNSJs0k9zF3-w}hyb0$pLKQ5RS;nP0*0e$Y&_WCj|;q+nHd9M zTBsH!D>HS1O%H~7Y-|jOzu4GVK$XCgRXJx~T=;t#uXjW|1~`L;!h`W!j=#DucDxf7 z5orhs#%V*rhldGkYikDv29~^p*~Sa$6S>p4O!I1MBZ`X^wzju7w?$ydYT|F%pLZ_0 zfe$a%!i814rLx7P!d0MBT5PEun_f#N0f0(b@kApwJGi~T#=(ywu9%bt%L))OFX5_R zOWx~87nSUpT5S585@|5{f-XK4a9K{$D<^;d7j3BCbY5Hef>Aw)0w4L}-$Vv>E-puI7gJurrJGTRo}uVH&%ZlneinOah`OQvXA#_v zyWa7NpC4m`D8sf%>_tc1YezaWJ3r83$hXVr$uXYedozKlUdfJI7zcwwUo#Z^1ntLJ z&PnI)%Q82((b7L`%Mpu0u3E4@w`6@@8l-D#T3<*%I+!xI0GuO7@p|V>APz^K1P@~V z83Z2*eN1ZS;;^(3b|Z-ncXD-Irn%m_%M1=YbIRzmZy^>E7M2Zke3d9qRu79qt#@vp zR64HX0}Ivl>CWLh|IN{tCIOrOOh37J%DmRr9GaUAxv}wa^Z+mX0IZ}D6bcSTb`rDse8%U7lw%~7FWb1<>uv;rcaca^p?saTwY$b%aAoTuJV{VKNp;v zLq>O7eCkZJcu*_swXfq}ta8_!Rj=1fdX|5a2J)z&^>H4h010}WE3xJO3bFQKuF zjgg;wmwzJctEVYdRN}zTg+L&~d~sD(ubq(e>FnZo_8DgO_R)EH=HMPL;qLKLT_HC! ziFLT?_uAUj?a2yIHK(d9vD?i)w6@lOtV+zb2?CggmLV`b+l(4O>uY(`yXMS_B~f;Ewj+epA~=s&>Z?ML{ESQC(c9blo97k5r3sSW zPukAA@E?-q3lahGz7`qIQSh?>8vPL)->tE}A_x{B=8kzJKOL z9gJEcB#SvWC`q2N!}RXNlo$ug?;71JNrAM&aA7irbjrtJ7zQNa1V{v3akp{m$1{;3BB?kdF#KO5Y?tQNC+Z ztBTE_%O0$<3?@KcOp?bHamuWw3+-K8)&MsH!vyRCGRkJ1>Qg*mvcieSLi!KR+@ApZ``d^XBfZwU1Ao z-o9|Qg_+rh_;`G<2EXOx^sFBN3z?U<#;RsI=E1H9^dO)G6i=`j{4X~NzHbYIy^ll3 zt&$AN3==c6y{jwp^H{o1-^V@ft6ex-0+`noaoVK`#AHCaq`p240(q{Z6BA+8dJw@iJTl_0 zd-d`jMOY$PCv~&T3E+G97xJt^9vg(5X_-p8_npL<}*eeSkkBzh!D&4u>MIz8nFb-vKvob2Jpj~~JE9-W%{)6sDsIIUn& zm7BJyDk(h%;EaJo2XY3_V#ilKctu2_Q2Sia?rgy3i0~c)P6j3}86+o~<~ABZ6wJ)V zCen<%VM~Odjzj7Fk8ZD`3>`dNU>UtsGK(?dR5LcF0&4bKVFY}=a~WOfyKnOR`P!oh zDUe?SOY`sgV-j5dA0uo@eOQZbI8pfKn4b$8N5R<4(fimL3380lGs-#{9~VgSxXvi&>FWv|=week0wK1V$iy=;~s;KnN^1}G#Q3GR{y^jmK3`iLBjIp_lN+6D*(ofAfyyImgJ zgBTo^Oy9@fkGqjdukn{7uaJC$97W&6{0|vJ(WIeoX$j5XIbuP3p1H_sCCV6CSzTRH ziCc8S#g=ZHfxA$BeZ4E;qt@0aO~vTm?am5od$*p8nQ=m@GJ+BP{k7UjQ|44fKrro{ zuDc?Gap(m7FZn_*R&Bv}WR$S!EV(-&*LZWUv1kI;HlLhza(nTqFr+J^1yI-bCd(6a znyZSgI4d1{eQqbPRtS_sr9?2HZV^L`KWd148u5 zWf%Z8JIun`I)X|hKoL@^0Jt}x>wco|tG@c~&M447?X7$H$0lr@PWq)FF5=b2-`rYrv#pfS3eVV{3{h61Sx8mUg7~u!hzO9c>ygZ|n zr6ohV*>|rp&abd%y+4jFL;-RD#)+7kQh&sFbcKm^|6X{zOlVRPz)i}t@lxNhKxswIs5*w>jklCu@=tzM;@B(#36b;;U zK*B&F(+)v_nH8k$W=#a6EtB8v*pQd^R)5Ns0jvwnBGuPCJRPgBG$=q+!06ifRPZSU z-3%+1y1K9c!UioqHeKM&y}&azHue=&vbM7NRAUPtMIbc&3Fm;##nGPgFIijCr7|02 zOcr^sF1n7VzxjpPG@@^>+ASutT8>3XNDe{JLh+L_Z54#yQI|sNWt{6_7<2AI z?%id@YaV`CC!rqF(8YC-3F3m(-u^aG!8v>o>&Mew%u71V_avb=u6Ma-)9t%`IOxqR zoCO^CQySt52i``coo`LHq3f`+=h!E#^L#Kk|2#RzfFsl-Zids^Ky#Fv1TS*J5Z#h7 z@t}Ft-nh;fPfG+biT!7Ou4%f(kr}_Y$C|z%#jerh>7Q{uNH>TYc6Krp*c%UeId3;J zYtqfDfX-S92raz@+r_$oOl-%eX}T(Zz12xmNYX(}0A+)kV})3o>z_7i_VQb{Y!}zp zC#bXh1>9s0_FA(!ltpcuZB}b@GdpYI4RDZBk^oC{LfSYu#7NRgvi#Pe|LF|+bCu4H znq1psD~!avo*R3#Pu@$kT{Ychq^H|AHZ@&L-ffvKpSe=9ih~FSXhPdLI$EC%WoK<} zTiUbs^c=VmH+V&RS`|>fK>C$8PJdL#i{>M6Wo|P{9RspbAy-g<*>a-!p*SV zB)V5OWN$s>cG4u|VpW_L^XCWlugf}U$eD5_4EtsdB3Q6f*KGW$@t^Nd9~vG|k=$oR zMoB3%`J~QuKfsWl3Kg5uJLBk3GETxA@#9kpQH^>-eiv(m)V+G73aFw({BBSjXP(`v zS(8b=ozVkFeM}eMJFa^8s*1+6XraAsBnclKHy%}PZ#2T(sW`~nf6f~7&}X|IXsJ}fS2+6_108u>`KDvOcz>>bsm=YeoM*p__0n2>nc&7p0g`R_UmZIh#2TUfa9iyh8K$iT!H!@0WG&J>@Dy9~hFb)P@InI1^db5))u zYffhPZQTx$cY@L9!kh(ZRKfe;=)rTs`!(v4E^3;+D%F&U1i!_$ z%<2En5V&}$toL%YbuBC`K#-t0z|359epnOQS#g^mD(M~ESqO#xFWIl|1aQHKg4*1} z!vW^J$HJ&O>HT%P=x~27t4?>M;iuVcjjETQd)X$ zF4uE~%GHb&7Q<=rhWB`uHT+UIJn72C_(!`nrE~U#^A7EL+4v`_t}9YFKz|1Z+xD$h z*NY8NP@zsHUddF+STQ9}^Xb3!pDxReqS$UVL^t}+W%%UtIYL{#nX;$dhHN-9mz7<) z3hn2UzkeGK{#EY^vHr*JHTqI;JKnR9xTZH{OcdCY-(X^b>`?-2*P{2-Wmc6L1VcP+ z;Z;BgDW;|#S{)8DwXJ*jn*^)^dzsOtK2wfHTv0{kjT8>2apRX3N9=nQ30ok96&X2I z>u6itx_=oA%t{bP2EN7lFhY%&hd;9L5$Ni(!H{(=vRwrjDuJ?u@xL~xu_$$KUCcWLo!H?m=f3qLqsE|gDlxGJ zqjD8^=Xn=nZ#+%!uGc7HPFfA_!>3}1u<=F?R%1PTrO3f6%F`cq6DZ_glBO=GENA!% z2>SmRxzU#ss8gxDKb!O7KKnD;3Zv@ccOVbjhT2h>s&fV@LP^^|5g_&d!8>s81Sx+| z-q~j`tqXtk zK^oM~!3i+2xq6a8J&^n>2wflt`I@L`nU3=taZaO#zrfK*MriKL)`F5fICV}IdI8Mq zV@)-HP`UHm_AN|U4EdHp+elPi85BfN9)S+fvXAGMGFM1jLMJu>kEp1kVc;wIzNrnt zunz=LoeH8k3tfH5QxKJ(Y*L!in6^VX-TSZVuF$V4xB+6S-E`Tylc|=Uo@weDcD4ea zVsL~)t;_#bjtgYK#Nx^+fb?WyE`rXW)Id-JFzK}&sOP}I;7CodNH!H!mY{!zl(<}= zp-3_>@5+&o&)(EqrtHO4nl@!_%GHg|D0f$l$p1xFN8y@kqOz{8G>zu8VNSyD935YQ zTR;Nu_gPgRpJu;&no#44GWn5+Qxp)`x9Y(+HjYlUy^CasB0!H2gq}lw z-jxE_?PJy0#1pCaJ-Q|^{odLNNlbk0vpd_qF@@t&pB5dhKotE9FDf=)E&)XM_@Sr& z>{ie}LSIt20@d;XwzzN|p#&t7Mf!7KcNsy0B8=$dCQn@qGBX9;ml%Qh1eg#IoGY8W zj707ruM1bCS70Hr^78tUkzp_puE0(9y*1B8+Vz7oGHX*z$y@u`qT5%X@_{N*C>YI> z2u(B_hJ*2Z)fQ#ht4e4Xzvv?*%D zQ{isohJ#jsw5W?fMVrr;XmlU4@R15ra@O8OY>$gcpO82G`}>3A(I!G1>I zsST%EJl6~TGhc#Ch@jsA;Xgq6$!k||nCe_sru;?C?R55mjjb)zbcwlcz zA-n>v{#g%X&HP|HVf7~DGLqo(3W*KYI!+4ArI~Td(-JO#C=WPBu{4ZVZn9YfY%3^K zsNA@z2V4&lX}|?R_f%O@O1Q^#7g)?~Sa6`k*KBNy%S)EzxLUf##=y9*`|Z{W2qBQL zOvoe}sriZNzIIG(oQKzrHet-ktU%{Rcc(qljd=ZKa64L&5uD0k zz$S1%UwHeI0}S`EmupdBV`I|U_^J;v&N)ESvW6~!8F5x;(9Dh2dbcU!i?4zZ3|*vO z=Q6S~w~sE~WcAsf?*rAT!J{^JuF2<_@reA=D;ThTMyIEvCzltmFJiOALK7nj$Pm1| z=gs0J`P$%27BB(y45FWY!E&E1JWTFfT#%*-$RH5CzydZ@GrGrpjr95FvM!v+kKb&< z(oFs1il_CNii#ANlE=oiYsyNKy_i&#Jc*IQA~;z0WlHIfcQ*108)LM1{4;Bq`JL-0`t*Z4i$SF2w=HH2?cX6iXXPWBK)=@HK!_~E^tU+{htx&ek z+Xuw4b(5sF*y0-zwsx8Cqfh&gijZb)Jp{K;H0V%P`ZQu+8_7)cx zM=2KcDcoK|R}-km>EnmihWsFU1X8>VWH@eSDDh?&0@JHY0ewBaKf4}_|8sB}vRnXJ z)z0x>!`wFTUEQs5j^=Pa-I?$9ln4kj5>K#3>RpJ2RM1o)Rf2=7PODfs$hWp%ym-;G z>s1v9r&i4p1Zp?mES+TFzK(blO4C7C7q;!%3;=E=T8@Sxxli3t`<=J87vhF}OsX!-czvCvevbRrEr~QO*1II0-^E&nX zA4?CzozbVxlKq#O$1$M8_9Efm{0d;dBmz;FsuKN35OH;rVhxTM;id8%azc z3<7h!Pw>4p1$Wi4fT?D^^o*WEDSW*MoHf>bjYq%2Nms1ts|Bp}|jAfny7 zJO5j?lzPbV2c<#GgTjZE(3Ik+>KP3sS~gfd;nQ~^4bHFZp6;3)7>4x2X))z z0Ux4UY?KKyx4rQ$JezzO<=}J;ID6K;;rVC(2)Mm$BTFAYPLh#R_W;wWSS=(RM9+^k zMA8u5AR`A`1!fF!Y_}WK2upzV0rtC6_Uxgr@{9+5v!A5$mfT}F01W?KeQX4sQDaJO zU-cN78C4E8=5VQRA|lac`Sz)k&I2k6_7Yf%<@T8|ryWc5x>wj}zgase2J$#{O=ImH zT|4#)c1>;$`bBPupj)|5Qgk^1hwhLx-M?16;M5U_6af#xNL-DN2=qQdfDedw3VbyH zrr;1=G;TQ}k4-b9Khg6!@iJD(TXdiEz%V z*fW(28{)v(DZiE+#b^;=ErTcDMpqLhSQ>!T>EkxIoM;YhE}S?{cGx>x<_F7Zq5b{t zE$hsx=IRbG`0mgwkgs7&{{bxbp?H1>#NuBxgp58D_QO&5?&uZ#a3h}pp>7(A+?L5x zZ}uJW&JMkDz1{6^yUh;0as1O#7Bwgw-qM(2E!5~EhBk73H_N$HXE7)rt@q}MUH+zA z<~#I!b8uYRDDELUF!uL`>5Un2*5 zz4I-rQiFchqBCp=O;tIs8WAYmJ@X-o(ew+;9uK4Eg&3KBhUPINOFR3&6eC|Kg;MT8l+mpH3^?)P0ybamltv==n5(bnLs;)72o1^XWMz+_y z=FHbK$TejD$p7LGLM^q&cr_9>w|(SRf926+=~>i!=!3-gzPT;&v%KE5G0*)V57X7L z#RwcUH&YL3Xd~W}uPjLUscD}Sy%I;^-^Wjc)1RC2SOc_}`wj=z52yA=?$dWKfA3-Z zr}wH}N4kLU$=VIu<#tM`{p5J7=mBMSsjpAssd2KJsRPWu8&7`rhoB2(w9LllCKT1XlLM>_vIc%h z$H3C+>i<0@XShYoipU!S6tE#mN`y;Fwpd?z2KL6sAe*YH@_(mvJ;fo$ljWz}4(6&F z@vHdXfpTlBO$qm?nBcVZA$}rrXrJ%DgX;~XP6ZxIS78)yvnbl;ANQ`6dqksN{YZ;Sb?$_oFjko|c0U<#)4oTf1A! zUk9I&QRiZ-a0#%f5|JikZv_}+8vu7(IY>mV*Xe+)95(e^CTQ1G>SVFQMh}nY7~g)6 zn~RZ{tG9K#6H~0qM*U!tpQpAMtopA_b;E2qhsrL8bqWj9&2YazMNCFxVvcq{!(&Mt zr%a7*nX0|kRZsuty!`$!nW@SoRnG-Ufwu{n=N>UrqxZdQ>G*l8VVZu#Xe@}cwzz;7 zX6TPS5jY^KvGp}5$RkE|R(YwE;| zb=OeN`jUZE(bNT@@r~ws0UHRjWMD@Q9p@}=7Uh&vc6kX8zN%>LXl=RLy9iS( zLIkb8GNm(kwz^rAyLP;Zz{AHotdY2?0Wp|agf}>i-o5)(gP!jm#L7A(!;e0iM0naM z60%ERnR0klVXL5In51A^$sQX-XIjiuFI+t4(C^HSl%i){d8}9XPCOG^AT!3tKRZ3E zZ^t8}bvyR=*rni<{>MV+oCTbP6Bt6Cl^d^pLn=v)%AtGRj0a^Xo3@)9XzDeGh7T3v>lT`c0e?KvJhb2tXtTUJo@8dk8#YoWi9_vd2 zs({aOG@&HOR$t9;`{`z++xoVB*0E}&oM{x3&N7}pE*U8=g+}K((@SHmyairss?X^u z1zocxYc6~Fc!7=qP?B)O*ld?T>%|kIJ}hTv=PVK5_>25;zEz1@wMzJH-d z>w>;}l)y>PFRP6sH4R7vN2}z-ubB-QP9oJ8{?;kKTq7 zsvzWl5-sSP{)VNK*Z9ZYp*yrseYJ>{tT#t7Gh=Gm^+%VF6mE|T?s?IjA9sSoPV|X= z%f3P`*-;Gbd5(M&+BM&|K_cXPIV-Nt2Pu9v3-hD?K;Msr_ISqxZYTZPpz#kJRIXFHSn@j!OM@E8y55MkAwIoE*1mi*#!c(R%gt9n4ZnvP!>hoiie?G1-f9etb zq8#YCn4x%1a&mGE!T;m!EdQ$Pf;CJ^w}f?yK!&Wn&a{@+&$6C` z*qX0#W9)*U*AdX=l~4-MamfTl`{!m{HXr`MaZCq@fj%3)H~2%Df@q?io_Eb6cOWj= zYatX}qk1w! z5~RW&Zjo|L`F{|zY|p4>`@&>qHN(vtO}9+ko$m7H_hy=}Xe;H$xurwPxZEyqA4UBj zm)7|V)pOQ=^lxW5*01$)F&^*-OV93Q_I)>|Sf5xcw2L_>K}*ow%xu|n>4_ZFtLWo~ zMu6f_#RxABFOHdo6{x`i$9E)UWvF9X+0j8aK~ziY+4Y>s!tGSt2br=lWNQs2;U3&GC=MW)q9suS?2rVGy89dk*FHy(Rlj?dP_1>M19 zF5l)G=qM7VmR7`SQ)S3;LHYE&SO$$|Hygx(u12A}x~a2$4DKxAj8+*Xc8B&xo4l;2 z(V($D0UbVW0HH}S#5C57Zt5bE7>2io$$Q$>+dnt~9aD!U<_$Y1Vb3D-4>{z&;{KXt z5jqFXv}(B8uaZ};Q();CwnibzteWH8;w#vr#bz7$=!kDRUXTE(#5YNrAQ}V6l~v)N zyo1b!juqYd&R~5Li&!(&x2dIg5iFzi&07!$9W|AK8cTr)O|ndV!6ZDc^Br6EEFBY@ z%|NT8?b7tt!$TWg?+sOmtMwL8VYtncW0DDV{yTp;BcE8XNl#2d3?5#vk^Q8i)#3Y4 z_LR_kcX`@N6MdXV=!4Lj7cDFcuJ?umuoC%;!Z6W2`eh|<5(wW`M8_)Tn_F1`_DM_S zA8;GS3l*!3wlE*do-Tby=jZ?S9wXDx(CklFtYv1td|qhDHaJZ6e!g+KtQ;GEvM*fxEoItJvT5q;A${Is>yZBYSryR4IO?<3i+?FAK!QpMMdV* zW)4+V(TTs;@eAvEi8#=0VAVuUwfy%2aVU!U z`=0k#icnl%~i?@<}|w&d*&81J<2wMkC)`+Z)u;L&aqBR6g1&=Q%SU54+uM) z<2-NdXh~NJeRm6Q&I^T~wTrgCkG9VWUtpqoiFy(N!T`cO?BfvOBPJReT2MRHy|4(N z0`x$vLG7#0q$)vH6(h^`xq%%4J&w5c5*B`{$};uwA&>5>eNKO9Fk{s>?+1AG>i~YIJMRB+dyMfi8?~w1(_pQQ?d!YAx z4fH%UvBB8M^`xl-GSphFGzK1qxEQ@A4#;Z@Xr!*e)v1$3U@ynsi^{g%rsrm8#9nStAZS2||m@GEG zqc+Z8aJvXgyMr$VU$iq7NXL+h8TGcghJ{_m#J*ZQK>idr`9sglz=KmGz`4wI8w07rw{Gc5f0`?JW*9t2}4e zo=6IKd>HULQy|0k#<9|w;&Xqb7IC|I>vZsLJ%O^~f2bfvx;D~^s0(&$l1O{EfS59N(P_{gnvBBR_BTjrJgsp`%;K**b zZUHEU4uhtZ8~C1&k&*oC&-m@s5Oe%-XiLJki$<3)!c&4_->27jc>~B)BV@!FgRr=7 z_=Rj3vaa_P=gE5(N;g}oG%#o8PO_Eg{%c#kTV`GRbEH}BERmPb63~%D6V$pg#z9~^QglyZu&PyGhTfrynd_q@ZH#_d#&0&cKJ+iPg)oeT_ir*j(Vc=5 zIJuoSo{O0{{!fD^8Pdt!R{WJ@I+YI^s_t`M)FN7d@7_PXF8S;4_KM68J=?4QyQH|R?j0todxTj6Qpd@q=Cm?FRunfCvd3G^VvJb}^x{Bb z;iQlOlvJ3x5cx&=l!U*mTHpVs$g^nttaOpt=Y`Y_NG+*F9A$h|tjikS+P1M?Hx+q6 z$8i4Rr`X0_?{!EgO|M70TqPrkY3CszD*$~ReK_ZV@cdjpfF7r93Zf8ZM%H~V-u~P~ zUD%wSqIF``PqA*Bp?!?f2~bv+KwjQ|We^y3P&#(emh%802wha=V)C z`)V5nRUyVSEOCVtixLXG?+wjyv1!K;6|+cw&f@56RfW;@r07-D#YU9&7kQRdT>y4k z*By?3H673}&@_5XPc6vu)Jt}2woBVRw&NEh$&>GV$HgrDSl+EJ|1T~nN|__}&XcW$ zfxt!0^=-^A*T~@4bdtH5wNk$aRMoXH+cLipMxXPUf8RE1piJUQ$xy)7lKC-QfK%yL zD&ycD#**#^FP6IkGx{U0R6xw~pT23_a%2gC#2Ep^`)Gk;EK%JgQ)ey}r4BJJPpywO zslu88P43NCf*1B*8b{IblHf79S=T6g&coYce|O_r?52U&Wd1GgU-8V@4?i*?nkEI( zeVv6&>lmj6U4K7Punvm5UXPH)TGuee&hXPG>a*%8d~sZQ;F(8s<;T*>-6L+ioU~OJ zlUiJB$lj>f^?Scnq{E8o%x^DloU4&cV}b z#8SO@zK2LBn>j@-qaS3E0?uNQQ+J4kA@Zo3?_OFnaiF<7(NcKbf0}JNoxVm9pWh=e0a~8Y0D-w$Yl?Oe%Cvq%45FkHlSI zYMSDC@scWq!FC718mlpFDe0_yN?LfyroOSTE-G7X%LvPTX38Yn zoc&$Z-`0eII_EU&xvP~TUu3upWK*IX&lqJIMg=dE^x}2CLB}2qBDbhVt|cS0uOe6n zbBe0deO#Ux>6mVLPm5s?1VA7eR5h5@6tHi6;BATH36qb~XiVHHqpM@*7;fvf=S0Nv ze&fl+Cy{R-HwF{_9IqCMaplJ)-&Zy}lISYA4Ne7%`zLR#-73RR>1r72EpT77Fc%Vd zsE_U8q`E8}bsc3|ENY3$9@lXTS1)xux&S`Oix>1ndm<91YDhU`A`#z(&{;)v3;nB^ zgQ&_`&^qjlW_7DSa@{oK@y+_A_V)57Z$DTrx_M_lghq{g+*=#92^1G|xK9l>wq=Q% zE12dPWB#Z`CdG@8qFr#BV4nJ$7T3*NmpLhI#_PuxLz-RvyXEsgnzgu=&sSfN7U%`G z>~T;+C+8zz4c`oyg+#Hvq)NLw+f-&*L_k*C)}fj_hCy+u7rp72(;?lqqohMWkLCa- ztA?xnHpk_x+~CG<9!{vi%)#1GRy@&R(xpFo>>99LV6*1@fq>|bCEdmo5??VEp74!r zo!jo)>d>s*mf3+(n~dO}3QzHp{eOn1bg>2?OzH%1X*nx7Z!>`}HzgwrUZG>o-J5rQOHKA=(y zf?br0;3&fP=s^w+yTk>oci%0io)vKa+^Pp0l$t$b*IDpH?0oRx&#iR#(7dARmCms)9?b(z5 za%A-r>h+O27LmFyYAXK6qMV0?nzlzSvoc| znH~2=9UUtY`&hL6uFxKF)^0C2eB(9DVB$3W_KRu$Fl+%peA#Sy;08-9L|Pe3q61b4|T)4td^lP&A8O;d7kiz!w4&!G&wVIrWHHrt;UYkR`B32m)> zi<&6a7CT*8r>M!C8!CzJY*RE^fAYkJnQ=;Iiy<xAfwBuP7_B!68n4mcVycb*c#%@)({O|Zo%8_soA7bF_1E!uurbGom`e^E!uYbs^ zPvg$(q76Y|&hWNlq|dt-(DmMwv!@l-4=QLCqP@wYjT>0A6F8oD_nj3FU8$>g0Pd45 zY?;bpwLVg9cz~T-PsUxjk1B_&l2*EV9n7hts2Z7Cr)p*(zzG!9MIN5U4j1&%eZ%C&r5204q^b26&a6)pI>oM>%o}o=d`|230 zFUjDt`!<##Dz9GX#|PYBW$mSxF~o9J+?KI2T9U=2*MWX3?PKUxG=4pM)EPs87>WjK zJd?utD6kc7>A;@Sa(IBQBtJGgE!w)(C4So0L!R?=i%sFXi{f*9`bNlp9h+fD7f>=Q zeNC}aJC-9=OtHoFH3*_9guV^0t!zI&tfSGt%OLCgV)$8#n)y#>(Vt@K3>g)?$kWXk z$1bm}RMGLb!q?j!@`FPh?|2Ilw7@Rps62lVFa^b7MdmcMdeaETs~jc8VGFiEx@pUh zG2oEn`(tQRIyZ)0v7^nO>|JLZQ@SEjW38*<_6r3JXYG37AXaV<0m0r)hwn;C#}uU1`~L7#GjF2E2Dmq|XT zqqVw?b-e=k#H-7#!dPg7185VNeF!3g%0+INa-r8!@=O)V_N1AspovpK|Nh+|g`nyzLVkE??JOR5D8kSw2x#u~ z9o(0R#~}6six&#MX#WiO$8!RF@7=%{pyzM%%s+?MQr9>^#0_NO7g6B+IR$QTnoPY@%( zE!%l=kSbPtk&aYYhgDl!k?cD|MuDnJw?$Sc#n8!+)mV4C^>5hD2PMD0zW)e`^f`;f`;V@jRQM0!;ab5R*JM~4)+s;HafcJ$3IZxDv zTR=q-)8+X&Hb!W&miDsx5r5(u%HsCB0a@yt-yrKbX^}w2#+5EKx!#V8K07@DY&lF9 z+r8yr-Y6BkKe@@V#ZJEQu{opm-39b9kjN0q^(!MYDK!YQF?U?6xK&D63cth5%M|%U z%MPRcr3!e3Dcj$qBSHF3Ua{Frz8!TQX?4Q^%{4a)GjQwHviPOx>zs1>tZ_p~C?N~T z3N+Y$AO7{7DrcscM_36&|1JC2TUc%tcN>}|Dj=vq+@D7hJ6TGZ`iV56{4e^AJZi^I zH`|xqua4PLjOqj$>Qb!sU*y!h{~2E|h1_OYsHir1vN>~R20nVlocgg(?Rh(dM}-hq z1;CZNB3y6+MmF)KADITT(`1fzF<${5o{W5Wi6?x%!nDyMz1cw#I z$PX*sJq?(m^j2;bZiC$Vhp($sc3TC#y~MzfXyXcNO8NI*K4hm4t|eQ{(EL@Uy%lXp zZJ<+eWan4RP`QqS$&{4dk;=h{@gM6|Jc@cm+zisI0CWkfHys)8&gmZL)KVA8J2%r6 zbe!L;;T+qkFyqj_wBSW;OCCLaESV%crRH5$c9sH`-KHhLbW=2STe&boR)9z8Sc?O$ zMu8+F4;xs?6JalK;9Uk%ZfE=M2<+Ut+&}xTu1+63E<33=Y;rrq|(CXLx(RD`P-jPODw1;T%DEwJNw;BeRp9c z);BYgYtmEbtSsF>)RF&$H_b>3o2hR*j`Zqw#CG@N7wfP?jVhKD+jy=HSGz}K5XX4`pM+ij)F#}2UnIDv{aKvX9t@t zC=g7(7&9%R4#j+Z14QBg;ucXq#O9FpUdQVwuc%-r1m9We{V9}Sy43NueHdtaoxdJM>8@BZeJDt`d%SnzAjQ2c0yEX(AHf+WgF4 zL4a^CwuDSDD3{(0tV_>MXeIqumNI0yQYg31_7hzSIItklcl$C%igVrk;?e94no-%O z@!Kip&rk3ngeukUXF>2j>Fr`vP`_$iqDPbBU5j6qW4%8yxOGOxR!nSOE3wj4prN3) z_c$2FOumqzyrL##!2756minu|lOlV=J~e|JtBreMt|laBsy08k?&MEp?SK7NMgGeJ z79MDH089B#(f(7$w(buofmN~1e~4kr0__wq@FETn*q-ofqRCC<$qntOBuWl*`n6kG znO7Ye%ns)LdG|%9V^cMe8tCl>a|$NItWgbj;3_ugG_~f6CKb6{HjJ6)&qd^Abf=WJ9>hrCqp7iCe0Th4fvdB zc7}N`#@k?HxWyu*C~5}eY|FEjpt8Ft~5oImnOAOF2Sduj%J z^(yIsHo2S$iloIaOf$(pXq{}nk&auXql>uh8}ZYLGUbOcPyDK2DL6U4Pq1Buw*>(QJ z`qqhby;|}2Jf~_fT%tx-y4Sag(FpDWpSYn6kq*Pbt#3$zGN#P2?qbX~xpHA6&gk+& zkHm1S5x;n3-A?%89&FjUdERTOB-@RIRkH~BOIwg&8D6LVeihn6x0a&*q*EWJOP-OK zFJqN^t}8*rs=bIU&e-`+@k-qUUgE#F@Jz*;0<8;qbf1N>kjkvQ^0^3+y6{uy>EHpNgFjn<74y4e$)`4s|r**Ez4 zHF6j~jn=HSRS=pTTx3)F!?R>)5w(^%war5Abo7{Yp3A~lnD$9+vRL0mzQDxyr=sMn zph9wX6qBJrBU{G}+yTNFlH8)yqmmBB!TIX3DG40tJysmNd~ngcvMPmHb|b+9BO~lU zE`)bLHFk+mDyn1etz3%#Pa*0oqyxJI6A3DF z!D<*+(e4{Gd>~+qa2q{MoL1J)T^rHfZXgMA2z>)8*oJ#Tb^#dkb}BR@89w*UNOnkq zy}!}dzDKVOb(RkbC1yy>(oY*7Rg2;gi@PqLep!ojS}8hg-wHECWBeGt-hxzWp;apT zow|*H7!E0IC1h!Xg#&=J|<4?V5D= zL%cHyw{ck5k#N1WN7Ot{tm^w93ZG+{Z)V$?_<;n02N!se{Q8ug>R8?evD@*#GYgSJ zOasvgWL3k?DXDm_DSd2uyVxQ-hblkNT}cPZacQcG$&8$aB4P5_sofF%aPoQRH(nZ5{wiQfjZbI4LU=0zsXZsk?j46%`P_IBANA%|8>y66Ke?Wn^KR4d- z^zd}YsdwF_blN-mFzv@8DvMD#9@v2=xlIyLW1b4QCBQ5X)O#d0z+eRg6hOLSVB+#Z zg4gVqt^U>F0uyp@t>F1HvQpg-- z{(5I0-uKArkL5&{U(c-8p*rtJegkPOWqNq|WYFT-nJ z85`IJ7;JmpOGKZdW!*6*(!n&x+6rlI^bk53&cr5sCGI#@*>J>*Hf4Mn3p~!)<&{n1 zEkAnL(Lp~l!~mEZdd|JOdK3YUloJ#)4mWd5fc576AM#kWv8n&o{%Hlblf|pQGr$!dDu33v>O;OxQevYLZLX5FM@tpL+G8^EwE4+Hc0 z^(}9UA}~%oooC&vB}yy(32(rF0>C-Qx?L~4?tL#3kVE3NQ3h=XW-H+GSQ%Wi z#nlS~_?}L-hcUJa%PrQ`6Fxon%QvLHXM8ta)3HPJA)o0f|fahV)}Zh z$UPPG^vWlA$T|a{F@S~jS5fIogx)>1M2CdeNrc{dOkVUdJ84ir&f7iL#`*o(<_I7) zPYLOMK`wBN4J@2MiW)BUD5rN%7ZMtB)6VAO-$UU^8oC17K#va;51s&AuXo$1M~xc> zV_ZVrq)|LVsG_X-$kBGq}CMJPi-CaXYi^0N#U^?dG z;?kYxeV5)NqTbW(l>6n3>4`_v{$f>H)@@&wA%N(BhaKI>T13R{5D6U%48fFq8L8GN%!2>oFCo&g3-E77~F(OdghqyjX`t7o^&6`NQJB&@j z%~xb(#@W7p&my{K1=!M^h!0liKt%zd4^EZonflmdirnUjh>wSJ1dAho`SN8N>MH_# zljd@onp(d~{*?SKtI1CQ_>YT~J+E^biVZ*%TFH946e%nzi69enIi5C(9vz#{?Jj@L zx`j_z@vUy6T&Qep7{J7r5kxp$Kvb!a_b=eLtM^)WBu@SE+g=B=nm1iqiW2s6f2QN; zfdcv-K#l+~;XhzepPmg>slAwteK4ollIa=lQJ>%u~IptG& zck_>BU@lPspbtPyfdZ(P_E`o1h3+_g*>x)OoVJp=y0m#bfIieFSoe3r#9 zw=_$|tDTEpL8UxLpe*N|b{=lt8%QuPr3%S zGa!Z;ic+*PSJ6`&W)OZv5k5IlV&@cS7r768`k}(0#PnYtde_C^IYej(O!2m&^0Fb3D7WIkZ_kOAdJpFu=a{HzJP?U1Nw+S^5|~wFjabPDh=+z*q`5^a=_3 z-rM_~r^^8q5qf1^U2kp60}IfI1MnXB2LS%!w?9Qt7*qfwD!>$h_CuYCR~BcI1D z-^|M>7v;W}zyb9Ws0>Xr-CrO86u={3|9w~Ty&V_j*#2Dr2?2zMvsF2^%Idn#s7x}x z3`LLOOMoK=fAZ?C{dsM=VmVT7gTTf`N@*n~GKH0mL=5z&5yW`x+?|@1Fkg=KD1WxH zKoEdbV?&|}>WfN?=t+y(jz3e`iS{K}6TO(2n5dJ}=nrVqAN63lUZ+Qz9@9g6;mE?fAmhD`V+lVJRP=hnB7*m$F}Ls?K;7j`w9QcmlT? z0)rALV6hEt*jU)C*81Mn&Qv%e!9b7Cpsi}qM^&FISKlN60`S?Z^@&)z9$Z>3(R+BU z2hegrO9IXgsCH%=O>IxMXL*2Wy`ZWp?&(qF(bHISs_e19Oj%1Sg4Jn}@AAd)yDLD& zgw0y&Ap}KAa?kUMJ8y&M)bEaT8Ml&mBW~c4lK|>dxPFl zM`tgaB2O>zI-{MF#Yuu;SubtKDbJ@rObOU+8%ov2l4O}~@}7?01LEQF9rWq$E7yz` zZs7+eut0tt>#}zBoJR<3>xU2fFJ+4YJi9Ug5GuW&$$FS6gY_1D@c~wY66qzQW+{Ob zn(Cq{nieHa{x>Uins&>lI#o9{5jNz;^={pZd}crEq~8`Al~FZg0t0WDedvRpgAkuL z5hhm1iukr-ar54=AP;(AaWTo{@nD!4Yhtf)E_0QkYL^F#o#aKxJd%yMB5GU9d?vXYz-?CyxLu<6XIJB%BW{s00v^9 zL7-T8=41O`KO55f;24I6K_#@Uh?ObIqlI?$DFwkb*t4RCpcN+`ZCOXb7HyD}n2SH|z#pRVT%Jb$#ydw3=hVT4cE5tg{ zP!8~4ehhEf-ms<(!hs(EC?;y+SGyL&X!AONOk zBO4z~=&%yNl{C5>QsXF52DMhpKg%XFJ$9LZn>(my&7fz9j40$8gqk%>lg~^~iW9Jr zV9cEZl$x(c0p+T)sq*{y$~u5E@}*;59xQV{PFc2dk7fYGohs|Fo~2=%>;rs-pK-byg5RHKI=h?N8(*J0l`bCBufEw#PE?xuXsVF4? zj4-4Pe%W>VZy)$42f-7bfPj#Qgk+6D_zZ9TlphdiZZG!G(J`}g!12B!BQbWeiZ4oG z`pHsMRAgXg_H8A`0Hh(nBDFu$914zl<4sauK^0&Y+MREI`Wb(oabN_<6GKCa1*QeS zRSxz=oB+%YaHDVEzWu=T>J@lPic$bRZgy@~LsQq#&JNpO-*d_ZNCALL`S0LgRk%HH z-+?doRfj=2J5&^ieu38>*e=061fee^A1P;BE z9tvolEO>ap?$f`)(?(Pvu6xG;tbz5jz6pf79{%H|iYmQ?jLC>!R^I?@$7<^%d^LB? z@rZvYz9Dgqn0>3fV+b1qknvT297#N{4mWluO1^SwSj`n&S+Rk01vc#t$=n#(es#db zRJICBnRx|PZX-OS>w95`8PW^q3n8avs@>gP1SSEARycUf8P%@Lbe}@`7z3z0>Ya7AI(UYofPx#o*sbZ>RMZM9$#D>8X^;{uqI)m3zG~ONMch{ zE^JAt@P3XF@%cFjWyr+I(>^mxU!rsH^1cT&ujj8M#S8+2QxtdicFk?9z-})j5*>$1O~ANvPa;O`AQA&uIsJ-xuH}U zigDigdt)S|RuUkeq05N-J6oGve9K-Vp>C?fj&~nv$v@w(+cqPOxQ8Cgp zh$!-9>RXG*L<2}r1YP#)mU{NcjO@*00H_rwqRVZ4n+8w<7LF7e-T=c2aNO?f9M&(T zJ*#T5XtDHbO0SUGM1SZsx~w=f@cdr9paeuqR(zr762=j`Z21x_xb_pOM~75?f^8d4 z3*OJikyA$#pYjuY0#p$Fp8YA$>l949{(pSZ;rogOuhS~9 z`P>9Dt7pH+VqCxhTAjHCrrM$$letCM*r;k({u?7wpK2g+l}gphyYf`Q55MA0k;fdU zw)4~`3h{yRzRz*X24Cdzvws+Ja4`*Gel;B{+8Ss*10qr?$?ncB=eI9NM^^=lZz1u_ z^ka2oFB%F?o=lIR9c!{j9lH09Ljd*b@&1+m$QzV^jQNer2?BF9W#&F94UI&yIho(n zEtd-EE^B&*3{yjFS0`*!VP~|ZVPD@@(#k>T{(QBzWgbw3K^Ps#hKJYpcz1Bs^Fu

oaaCL(YwJ}2QPUPnq4(0&+@e*5{PbQseRJa>N^qrY!^hmAEuX19$n}bmBUjhR zjYhY$+OK%$UE(HEp)oNfJ@iJMNB>K@lsATOVzuxqsgZx%4UsC>5FqBM>s5RD1r;;2 z2%lR2VW3MCYV+9N%_gTUE(e>k(u7Y@D2ibd5m|L_p&swoh7`qfV^b0c9z(2kb>)vE zxzw(g{cT*jcCY8<2W*WyI9SA=bU90YGR&^YWWYRMwx5QY3Yr!q-OLXV z-b814#BXc;^QQ6jG$Ea#KUoQUceG8au`kcVqpZy**p;HfMaw%t`2jhgwcRT2~|jT>R7iQC)_uUb-Po!WtLWfvFc$+Zhd)kn@u6uGb-N{6nwT{r+ZQH1MWnWzqEq&pb)$yyNjV}~y@)dve$SGFZ77l9X zqq?Gb1Qqp7$J64^xDfW5kpsR{CMSPx{cD8!+_KMASRmz_k18M$od~if%1+J3=We)5 z!$$BQI=t1gI6GZ^0lmp5KiS8kls!y}`~4-4~zk^PEEydD$etZ2D}stY50FK?hUD$IG)w6ew0QWMv`E5ae0 zllAOSabL$EsB0ZXS%;!!XS7vZvX0W}`HhUz_=K5~iaVF_+L9YGl*7VdC42ss_ThJ4ekU6Wk4uG0r`s(y@^~#iF6m!eIy*cC_~u_3 z3#v)Jb@~#k@pyZV@1+<#DDTgJc~Rb2k12)?xTkF76q~NlOVq0a3z}sY2Y2(p?76n7 z;i#&ZzLSwdm#B-H)4%!V1U%#0A!40-o9cRKPdm0?WS~!Eq*GLuyB&o}iB=O2WsDkW07Rp+zzV=yb`GzWfR-@Lx& zDy}OUQ&3u;Bt*>6*+1c$FXk2|-w;8=#ef(;JeXx{&T_r7g!W4;kztJ8Pt5V(IG>J&MPxj6{K5;kT4MG2Q;ckkB8H(( z{vx;e(I*VU89hb4q}$(4p--#S&?hvCO%dM*+7R`+ICDSXgZAVm1o- z$#M5D%KW;GoC6762)@T?6w(kGWIu(MF_JiIyVsv}wtS(SlCRa)w}kEdY%|lAqqE)( z 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

bG^xtwRU~7H$$~; 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 G>;C{rrqSB~ literal 0 HcmV?d00001 From 312479003f5c8e08fc99d802a23c7804a14e5da7 Mon Sep 17 00:00:00 2001 From: Jamil RAICHOUNI Date: Fri, 29 Apr 2022 15:09:39 +0200 Subject: [PATCH 125/143] Pull latest README revision changes --- capella-dockerimages | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/capella-dockerimages b/capella-dockerimages index 557a69d78..1b0147666 160000 --- a/capella-dockerimages +++ b/capella-dockerimages @@ -1 +1 @@ -Subproject commit 557a69d782499e918a1215033bfc9aa5da551acb +Subproject commit 1b0147666211436fd3f33424add444dbc16d86fc From a1daf8d5fa8d39732ae8c788580cf36c8df3b3ec Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 29 Apr 2022 15:11:56 +0200 Subject: [PATCH 126/143] Add commands directly under ssl key in Makefile --- mocks/oauth/Makefile | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/mocks/oauth/Makefile b/mocks/oauth/Makefile index fc92aed14..74462fdfb 100644 --- a/mocks/oauth/Makefile +++ b/mocks/oauth/Makefile @@ -1,8 +1,6 @@ CERTS_DIR = ../../certs/ -ssl: $(CERTS_DIR)localhost.p12 - -$(CERTS_DIR)localhost.p12: +ssl: export MSYS_NO_PATHCONV=1; \ openssl req -x509 -out $(CERTS_DIR)localhost.crt -keyout $(CERTS_DIR)localhost.key \ -newkey rsa:2048 -nodes -sha256 \ From 9110bd260e57d951874be1efd06cefa1d39834d5 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 29 Apr 2022 15:13:04 +0200 Subject: [PATCH 127/143] Allow to call oauth mock over http --- backend/config/config_template.yaml | 2 +- mocks/oauth/conf.json | 8 +------- mocks/oauth/conf_with_cert.json | 30 +++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 mocks/oauth/conf_with_cert.json diff --git a/backend/config/config_template.yaml b/backend/config/config_template.yaml index 2b5ca5c5a..4d5c70a8b 100644 --- a/backend/config/config_template.yaml +++ b/backend/config/config_template.yaml @@ -48,7 +48,7 @@ authentication: oauth: # Only required when using provider oauth endpoints: - wellKnown: https://localhost:8080/default/.well-known/openid-configuration + wellKnown: http://localhost:8080/default/.well-known/openid-configuration tokenIssuance: authorization: diff --git a/mocks/oauth/conf.json b/mocks/oauth/conf.json index f170f0186..33c8ea93f 100644 --- a/mocks/oauth/conf.json +++ b/mocks/oauth/conf.json @@ -1,13 +1,7 @@ { "interactiveLogin": true, "httpServer": { - "type": "NettyWrapper", - "ssl" : { - "keyPassword" : "", - "keystoreFile" : "/opt/localhost.p12", - "keystoreType" : "PKCS12", - "keystorePassword" : "" - } + "type": "NettyWrapper" }, "tokenCallbacks": [ { diff --git a/mocks/oauth/conf_with_cert.json b/mocks/oauth/conf_with_cert.json new file mode 100644 index 000000000..f170f0186 --- /dev/null +++ b/mocks/oauth/conf_with_cert.json @@ -0,0 +1,30 @@ +{ + "interactiveLogin": true, + "httpServer": { + "type": "NettyWrapper", + "ssl" : { + "keyPassword" : "", + "keystoreFile" : "/opt/localhost.p12", + "keystoreType" : "PKCS12", + "keystorePassword" : "" + } + }, + "tokenCallbacks": [ + { + "issuerId": "issuer1", + "tokenExpiry": 120, + "requestMappings": [ + { + "requestParam": "scope", + "match": "openid", + "claims": { + "sub": "subByScope", + "aud": [ + "audByScope" + ] + } + } + ] + } + ] +} From ad14cb8853f9726fc7d90272d879480159138d19 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 29 Apr 2022 15:18:54 +0200 Subject: [PATCH 128/143] Apply suggestions from #63 --- README.md | 4 ++-- doc/getting_started.md | 2 +- helm/templates/backend/backend.configmap.yaml | 6 +----- helm/templates/backend/backend.deployment.yaml | 2 -- 4 files changed, 4 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 55e32ba04..39a2fd45d 100644 --- a/README.md +++ b/README.md @@ -45,10 +45,10 @@ Create a local K3D cluster and deploy the application ``` make create-cluster -MY_EMAIL=me@example.com make deploy +MY_NAME=username make deploy ``` -Replace `me@example.com` with your e-mail address. An administrator account will be made for this user. +Replace `username` with a username. An administrator account will be made for this user. Make sure you log in with the defined username if you want to test the admin account. Verify your deployment - components should be in the "Running" state: diff --git a/doc/getting_started.md b/doc/getting_started.md index 41f4f2352..d5edaea6e 100644 --- a/doc/getting_started.md +++ b/doc/getting_started.md @@ -10,7 +10,7 @@ You will be welcomed by a friendly screen and you can log in. The default setup ![Welcome screen](img/collab-step-1.png) -As username, provide the e-mail address you entered when deploying the cluster. If you forgot to set an e-mail address, use `me@example.com`. +As username, provide the username you entered when deploying the cluster. If you forgot to set an admin username, use `username`. ![OAuth mock](img/collab-step-2.png) diff --git a/helm/templates/backend/backend.configmap.yaml b/helm/templates/backend/backend.configmap.yaml index 4d052023e..23cbb0462 100644 --- a/helm/templates/backend/backend.configmap.yaml +++ b/helm/templates/backend/backend.configmap.yaml @@ -7,8 +7,4 @@ metadata: id: {{ .Release.Name }}-configmap-backend data: config.yaml: | - {{- tpl (.Files.Get "config/backend.yaml") . | nindent 4 }} - {{ if eq .Values.target "local" }} - oauth.crt: |- - {{ .Files.Get "config/oauth.crt" | nindent 4 }} - {{ end }} \ No newline at end of file + {{- tpl (.Files.Get "config/backend.yaml") . | nindent 4 }} \ No newline at end of file diff --git a/helm/templates/backend/backend.deployment.yaml b/helm/templates/backend/backend.deployment.yaml index 6264220f8..53a1d584a 100644 --- a/helm/templates/backend/backend.deployment.yaml +++ b/helm/templates/backend/backend.deployment.yaml @@ -30,8 +30,6 @@ spec: protocol: TCP {{ if eq .Values.target "local" }} env: - - name: REQUESTS_CA_BUNDLE - value: /etc/capellacollab/oauth.crt - name: OAUTHLIB_INSECURE_TRANSPORT value: "1" {{ end }} From 9957187b7b1f6a2e9632873190381e5dd94c05c0 Mon Sep 17 00:00:00 2001 From: Jamil RAICHOUNI Date: Fri, 29 Apr 2022 17:22:08 +0200 Subject: [PATCH 129/143] WIP: Revision --- README.md | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 39a2fd45d..e6f234236 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,25 @@ # Capella Collaboration Manager -A web platform for collaboration on Capella (MBSE) projects +A web platform for collaboration on [Capella](https://www.eclipse.org/capella/) +(MBSE) projects -**Copyright 2021, 2022 DB Netz AG, licensed under Apache 2.0 License (see full text in LICENSE file)** +**Copyright 2021, 2022 [DB Netz AG](https://fahrweg.dbnetze.com/), +licensed under Apache 2.0 License (see full text in [LICENSE](./LICENSE) file)** -Turn your local Capella experience into a browser-based collaboration platform for model-based projects. Designed to enable co-working across multiple organizations. +Turn your local Capella experience into a browser-based collaboration platform for +model-based projects. Designed to enable co-working across multiple organizations. Here are some of the key features: * Run Capella in a browser -* Supports both git and TeamForCapella co-working models -* SSO via OAuth2 -* No need to install or maintain local Capella clients - clients are made on demand in a underlaying Kubernetes cluster -* Access to projects and models is self-managed by project leads, model owners or delegates -* Within a project a user could have read or read/write access. Read-only users don't consume licenses in TeamForCapella projects +* Supports both git and [TeamForCapella](https://www.obeosoft.com/en/team-for-capella) + co-working models +* Single sign on (SSO) via [OAuth2](https://oauth.net/2/) +* No need to install or maintain local Capella clients - clients are made on demand in + an underlaying [Kubernetes](https://kubernetes.io/) cluster +* Access to projects and models is self-managed by project leads, model owners or + delegates +* Within a project a user could have read or read/ write access. Read-only users don't + consume licenses in TeamForCapella projects * Integration with git repository management for backup and workflow automation around the models We have more exciting features on our roadmap, like integration of templates, planning and release management for model-derived artifacts (documents, interface definitions, spreadsheets, etc.) From 021f8d6b1ddf7b7282ea50ef89be2d864763c419 Mon Sep 17 00:00:00 2001 From: Jamil RAICHOUNI Date: Fri, 29 Apr 2022 22:51:26 +0200 Subject: [PATCH 130/143] WIP: Revision. So far mainly satisfying markdownlint --- README.md | 76 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 45 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index e6f234236..2ca1111d7 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ model-based projects. Designed to enable co-working across multiple organization Here are some of the key features: * Run Capella in a browser -* Supports both git and [TeamForCapella](https://www.obeosoft.com/en/team-for-capella) +* Supports both git and [Team for Capella](https://www.obeosoft.com/en/team-for-capella) co-working models * Single sign on (SSO) via [OAuth2](https://oauth.net/2/) * No need to install or maintain local Capella clients - clients are made on demand in @@ -19,82 +19,96 @@ Here are some of the key features: * Access to projects and models is self-managed by project leads, model owners or delegates * Within a project a user could have read or read/ write access. Read-only users don't - consume licenses in TeamForCapella projects -* Integration with git repository management for backup and workflow automation around the models + consume licenses in Team for Capella projects +* Integration with git repository management for backup and workflow automation around + the models -We have more exciting features on our roadmap, like integration of templates, planning and release management for model-derived artifacts (documents, interface definitions, spreadsheets, etc.) +We have more exciting features on our roadmap, for instance: -# Getting started +* an integration of templates +* a planning and release management for model-derived artifacts like documents, + interface definitions, spreadsheets, etc. -## Requirements +## Getting started -## Running locally with K3D +### Requirements -### Prerequisites +### Running locally with k3d + +#### Prerequisites + +To deploy the application you need: -To deploy the application you'll need: * [Docker](https://docs.docker.com/engine/install/ubuntu/) * [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/) * [helm](https://helm.sh/docs/intro/install/) If you'd like to run it locally, these tools are additionally required: -* [K3D](https://k3d.io/) - a lightweight k8s cluster simulator -* `nss-myhostname` to access local container registry - you can get in on Ubuntu via `sudo apt install libnss-myhostname` -When you have all that installed you can simply do the following: +* [k3d](https://k3d.io/) - a lightweight k8s cluster simulator +* `nss-myhostname` to access local container registry + (on Ubuntu you can get it via `sudo apt install libnss-myhostname`) -``` +When you have all that installed you can do the following: + +```zsh git clone --recurse-submodules https://github.com/DSD-DBS/capella-collab-manager.git cd capella-collab-manager ``` -Create a local K3D cluster and deploy the application +Create a local k3d cluster and deploy the application -``` +```zsh make create-cluster -MY_NAME=username make deploy +MY_NAME= make deploy ``` -Replace `username` with a username. An administrator account will be made for this user. Make sure you log in with the defined username if you want to test the admin account. +Replace `` with a username. An administrator account will be made for this +user. Make sure you log in with the defined username if you want to test the admin +account. Verify your deployment - components should be in the "Running" state: -``` +```zsh kubectl get pods --namespace=t4c-manager ``` -Important! If you use Windows and the Git Bash to execute the commands, you have to set the environment variable: `MSYS_NO_PATHCONV=1`. -Otherwise the commands will break with UNIX paths, because the Git Bash tries to add a Windows path prefix. +Important! If you use Windows and the Git Bash to execute the commands, you have to set +the environment variable: `MSYS_NO_PATHCONV=1`. +Otherwise the commands will break with UNIX paths, because the Git Bash tries to add a +Windows path prefix. If something goes wrong, please open an issue on Github. -To clean up the environment, simply run: +To clean up the environment run: -``` +```zsh make delete-cluster ``` -### Starting a session +#### Starting a session -Once the cluster is installed and all services are running (`kubectl get pods`), you can get started. Follow our -[Getting started guide](doc/getting_started.md) and be up and running in a few minutes. +Once the cluster is installed and all services are running (`kubectl get pods`), you can +get started. Follow our [Getting started guide](doc/getting_started.md) and be up and +running in a few minutes. -## Deployment +### Deployment -## Running on a cluster +### Running on a cluster * Ensure your `kubectl` configuration points to the right cluster * Run `MY_EMAIL=me@mydomain.com make deploy` to deploy to your kubernetes cluster. -## TeamForCapella integration +### Team for Capella integration TODO -# How it works +## How it works Here comes a brief intro into architecture of this thing (TODO) -# Contributing +## Contributing -We'd love to see your bug reports and improvement suggestions! Please take a look at [guidelines for contributors](CONTRIBUTING.md). +We'd love to see your bug reports and improvement suggestions! Please take a look at +[guidelines for contributors](CONTRIBUTING.md). You'll also find instructions on how to set up a local development environment. From df97ae44b54ba1fb2dd15b4f3fec93d4c1c4bf0e Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 2 May 2022 11:21:31 +0200 Subject: [PATCH 131/143] Check for capella.zip and capella.tar.gz before download --- Makefile | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index a5aac56e7..38b768b28 100644 --- a/Makefile +++ b/Makefile @@ -21,14 +21,20 @@ frontend: docker build --build-arg CONFIGURATION=local -t t4c/client/frontend -t $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/capella/collab/frontend frontend docker push $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/capella/collab/frontend -capella: capella-dockerimages/capella/archives/capella.tar.gz +capella: capella-download docker build -t base capella-dockerimages/base docker build -t capella/base capella-dockerimages/capella docker build -t capella/remote -t $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/client/remote capella-dockerimages/remote docker push $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/client/remote -capella-dockerimages/capella/archives/capella.tar.gz: - curl -L --output $@ 'https://ftp.acc.umu.se/mirror/eclipse.org/capella/core/products/releases/5.2.0-R20211130-125709/capella-5.2.0.202111301257-linux-gtk-x86_64.tar.gz' +capella-download: + cd capella-dockerimages/capella/archives; \ + if [[ -f "capella.tar.gz" ]] || [[ -f "capella.zip" ]]; \ + then \ + echo "Found existing capella archive."; \ + else \ + curl -L --output capella.tar.gz 'https://ftp.acc.umu.se/mirror/eclipse.org/capella/core/products/releases/5.2.0-R20211130-125709/capella-5.2.0.202111301257-linux-gtk-x86_64.tar.gz'; \ + fi t4c-client: docker build -t t4c/client/base capella-dockerimages/t4c From 99f847001132048d4103e5648eb138241d37065b Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 2 May 2022 12:40:46 +0200 Subject: [PATCH 132/143] Update instructions for deployment --- README.md | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 2ca1111d7..2235365cf 100644 --- a/README.md +++ b/README.md @@ -94,10 +94,29 @@ running in a few minutes. ### Deployment -### Running on a cluster - -* Ensure your `kubectl` configuration points to the right cluster -* Run `MY_EMAIL=me@mydomain.com make deploy` to deploy to your kubernetes cluster. +### Install on a cluster + +1. Ensure your `kubectl` configuration points to the right cluster +2. Copy `helm/values.yaml` to `deployments/yourinstance.values.yaml` +3. Set all required values in the `deployments/yourinstance.values.yaml` configuration file +4. Create your sessions namespace in your kubernetes cluster: + ``` + kubectl create namespace + ``` +5. Run the following command to deploy to your kubernetes cluster: + ``` + helm install production -n -f deployments/yourinstance.values.yaml helm + ``` +6. Set up the database for guacamole + +### Upgrade an cluster instance + +1. Ensure your `kubectl` configuration points to the right cluster +2. Compare `helm/values.yaml` with your `deployments/yourinstance.values.yaml` and update your configuration accordingly. +3. Run the following command to deploy to your kubernetes cluster: + ``` + helm install production -n -f deployments/yourinstance.values.yaml helm + ``` ### Team for Capella integration From d3be031c34ec3b9b5eca7025a0fd982452be8b73 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 2 May 2022 12:48:47 +0200 Subject: [PATCH 133/143] Update local deployment instructions Remove MY_NAME and use admin as default admin user. --- Makefile | 2 -- README.md | 12 +++++++----- doc/getting_started.md | 2 +- helm/values.yaml | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index 38b768b28..ece570758 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,6 @@ CLUSTER_REGISTRY_NAME = myregistry.localhost REGISTRY_PORT = 12345 RELEASE = dev-t4c-manager NAMESPACE = t4c-manager -MY_NAME ?= me@example.com EASE_DEBUG_PORT = 3390 all: backend frontend @@ -73,7 +72,6 @@ helm-deploy: --values helm/values.yaml \ $$(test -f secrets.yaml && echo "--values secrets.yaml") \ --set docker.registry.internal=k3d-$(CLUSTER_REGISTRY_NAME):$(REGISTRY_PORT) \ - --set database.backend.initialAdmin=$(MY_NAME) \ --set general.port=8080 \ --set t4cServer.apis.usageStats="http://$(RELEASE)-licence-server-mock:80/mock" \ --set t4cServer.apis.restAPI="http://$(RELEASE)-t4c-server-mock:80/mock/api/v1.0" \ diff --git a/README.md b/README.md index 2235365cf..dfa9a767a 100644 --- a/README.md +++ b/README.md @@ -60,12 +60,14 @@ Create a local k3d cluster and deploy the application ```zsh make create-cluster -MY_NAME= make deploy +make deploy ``` -Replace `` with a username. An administrator account will be made for this -user. Make sure you log in with the defined username if you want to test the admin -account. +It can take a long time to run, but shouldn't take more than 5 minutes. Meanwhile, the following message appears several times: +``` +ready.go:277: [debug] Deployment is not ready: t4c-manager/dev-t4c-manager-backend. 0 out of 1 expected pods are ready +``` +This is nothing to worry about - it just takes a while for all containers to start. Verify your deployment - components should be in the "Running" state: @@ -115,7 +117,7 @@ running in a few minutes. 2. Compare `helm/values.yaml` with your `deployments/yourinstance.values.yaml` and update your configuration accordingly. 3. Run the following command to deploy to your kubernetes cluster: ``` - helm install production -n -f deployments/yourinstance.values.yaml helm + helm upgrade production -n -f deployments/yourinstance.values.yaml helm ``` ### Team for Capella integration diff --git a/doc/getting_started.md b/doc/getting_started.md index d5edaea6e..63d9bc24e 100644 --- a/doc/getting_started.md +++ b/doc/getting_started.md @@ -10,7 +10,7 @@ You will be welcomed by a friendly screen and you can log in. The default setup ![Welcome screen](img/collab-step-1.png) -As username, provide the username you entered when deploying the cluster. If you forgot to set an admin username, use `username`. +As username, provide the `admin` for the admin user. If you have changed the username or want to test another user, enter your custom username. ![OAuth mock](img/collab-step-2.png) diff --git a/helm/values.yaml b/helm/values.yaml index 51b1aa26d..5731ba635 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -82,7 +82,7 @@ database: # Username of an initial admin user # Is only set if the database is empty! - initialAdmin: me@example.com + initialAdmin: admin internal: ###### IF database.backend.deploy == True ###### From 159b55c329c9f985193fc11067992794fcdc1c2a Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 2 May 2022 12:50:23 +0200 Subject: [PATCH 134/143] Remove Windows MYSY instructions The MSYS_NO_PATHCONV environment variable is now set in the Makefile directly. --- README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/README.md b/README.md index dfa9a767a..0fd55c248 100644 --- a/README.md +++ b/README.md @@ -75,11 +75,6 @@ Verify your deployment - components should be in the "Running" state: kubectl get pods --namespace=t4c-manager ``` -Important! If you use Windows and the Git Bash to execute the commands, you have to set -the environment variable: `MSYS_NO_PATHCONV=1`. -Otherwise the commands will break with UNIX paths, because the Git Bash tries to add a -Windows path prefix. - If something goes wrong, please open an issue on Github. To clean up the environment run: From a27ea8f2acb5baf462d90624d1a69eddb38b860b Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 2 May 2022 13:19:50 +0200 Subject: [PATCH 135/143] Add architecture to CONTRIBUTING.md --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bbff162d7..556b462e4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -13,7 +13,7 @@ your code follows our style guidelines outlined below. ## General This project consists of several services. Here is the architecture of the services: -TODO +![Capella Collab Manager architecture](doc/architecture.png) To get an overview of the services, it is also worth taking a look at the Helm Chart, which can be found in the `helm` folder. From d3b02a9e877a9cae73de14971c10db924b15bbc2 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 2 May 2022 13:24:10 +0200 Subject: [PATCH 136/143] Update CONTRIBUTING.md and describe both oauth certificate options --- CONTRIBUTING.md | 52 +++++++++++++++++++---------- backend/config/config_template.yaml | 2 +- 2 files changed, 35 insertions(+), 19 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 556b462e4..8a4a77e11 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -34,23 +34,30 @@ make capella-dockerimages We use OAuth2 as authentication protocol for our application. Therefore we need an OAuth2 server. For local development, we have an OAuth mock that needs to be started first. -1. Navigate to the `mocks/oauth` directory. -2. The application requires `https` for requests to the the oauth server. - This means that we need a certificate for localhost. We therefore require the files `projectroot/certs/localhost.cert` and `projectroot/certs/localhost.p12`. +First of all, navigate to the `mocks/oauth` directory. - You can easily create them with +You can handle the SSL-support in two different ways: + +### Option 1: Use insecure connections +This is the default and recommended option for local development. Do not use it in production! +1. Run the OAuth2-Mock-Server with: ```sh - make ssl + make start ``` -3. Import the certificate to your local certificate store. - - Note for *Linux*-Users: If you run `make dev`, it automatically uses the certificates in the `projectroot/certs` directory. - Note for *Windows*-Users: Python doesn't read the certificates from the Windows certmgr. You have to add an environment variable `REQUESTS_CA_BUNDLE` with the path to the `localhost.crt` file. -4. Run the OAuth2-Mock-Server with: +2. Verify that the server runs, e.g. by navigating to [Well Known](http://localhost:8080/default/.well-known/openid-configuration) + +### Option 2: Create a self signed certificate +1. We require the files `projectroot/certs/localhost.cert` and `projectroot/certs/localhost.p12`. + You can easily create them with + ```sh + make ssl + ``` +2. Import the certificate to your local certificate store. +3. Run the OAuth2-Mock-Server with: ```sh - make start + make start-ssl ``` -5. Verify that the server runs, e.g. by navigating to [Well Known](https://localhost:8080/default/.well-known/openid-configuration) +4. Verify that the server runs, e.g. by navigating to [Well Known](https://localhost:8083/default/.well-known/openid-configuration) ## Backend @@ -74,18 +81,27 @@ Run the following steps: Please copy the file `config_template.yaml` to `config.yaml` and adjust the values. *Hint*: If you already have the k8d cluster running and the if you have the application deployed, - then no configuration values need to be adjusted. It might be helpful to adjust the initial admin user. - Please use your username as value for the `intial.admin` configuration option. - This will setup your user as administrator during the database initialization. -4. A PostgreSQL database is required. You can run the following command to set up the database: + then no configuration values need to be adjusted. + +4. This step in only **necessary, if you use the self signed certificate** option for the oauth mock). + If you don't have the certificate in your local certificate store, please execute the following command: + ``` + export REQUESTS_CA_BUNDLE=$(pwd)/../certs/localhost.crt + ``` + + You need to adjust the option `` in the `config.yaml` to the following value: + ``` + https://localhost:8083/default/.well-known/openid-configuration + ``` +5. A PostgreSQL database is required. You can run the following command to set up the database: ```sh make database ``` -5. Start the application with: +6. Start the application with: ```sh make app ``` -6. You should see it running on port 8000. +7. You should see it running on port 8000. - [Healthcheck](http://localhost:8000/healthcheck) - [Documentation](http://localhost:8000/docs) diff --git a/backend/config/config_template.yaml b/backend/config/config_template.yaml index 4d5c70a8b..bc60807d6 100644 --- a/backend/config/config_template.yaml +++ b/backend/config/config_template.yaml @@ -48,7 +48,7 @@ authentication: oauth: # Only required when using provider oauth endpoints: - wellKnown: http://localhost:8080/default/.well-known/openid-configuration + wellKnown: http://localhost:8083/default/.well-known/openid-configuration tokenIssuance: authorization: From 82acc5119babd3916a6ff5ef48a6bf81335a5991 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 2 May 2022 15:44:39 +0200 Subject: [PATCH 137/143] Open browser window after deployment --- Makefile | 16 +++++++++++++++- helm/templates/mock/oauth.deployment.yaml | 11 ++--------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index ece570758..159c9170d 100644 --- a/Makefile +++ b/Makefile @@ -57,7 +57,7 @@ mock: capella-dockerimages: capella t4c-client readonly ease -deploy: oauth-mock backend frontend capella mock helm-deploy +deploy: oauth-mock backend frontend capella mock helm-deploy open # Deploy with full T4C support: deploy-t4c: backend frontend capella t4c-client readonly-ease mock helm-deploy @@ -80,6 +80,20 @@ helm-deploy: $(RELEASE) ./helm $(MAKE) .provision-guacamole .provision-backend +open: + export URL=http://localhost:8080; \ + if [[ "Windows_NT" == "$(OS)" ]]; \ + then \ + start "$$URL"; \ + elif [[ "$(shell uname -s)" == "Linux" ]]; \ + then \ + xdg-open "$$URL"; \ + elif [[ "$(shell uname -s)" == "Darwin" ]]; \ + then \ + open "$$URL"; \ + fi + + clear-backend-db: kubectl delete deployment -n t4c-manager $(RELEASE)-backend-postgres kubectl delete pvc -n t4c-manager $(RELEASE)-volume-backend-postgres diff --git a/helm/templates/mock/oauth.deployment.yaml b/helm/templates/mock/oauth.deployment.yaml index 34ea72466..77d4aa149 100644 --- a/helm/templates/mock/oauth.deployment.yaml +++ b/helm/templates/mock/oauth.deployment.yaml @@ -26,13 +26,6 @@ spec: - name: http containerPort: 8080 protocol: TCP - livenessProbe: - httpGet: - path: /isalive - port: http - readinessProbe: - tcpSocket: - port: 8080 volumeMounts: - name: {{ .Release.Name }}-oauth-mock mountPath: /opt @@ -42,10 +35,10 @@ spec: resources: limits: cpu: "0.5" - memory: 100Mi + memory: 1Gi requests: cpu: "0.5" - memory: 40Mi + memory: 100Mi {{ if .Values.cluster.container }} {{- toYaml .Values.cluster.containers | nindent 10 }} {{ end }} From dc266e1f16cf0541d5f41f1a4ce67feb13cbb024 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 2 May 2022 15:52:14 +0200 Subject: [PATCH 138/143] Remove requirements from README --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 0fd55c248..b325a0881 100644 --- a/README.md +++ b/README.md @@ -31,8 +31,6 @@ We have more exciting features on our roadmap, for instance: ## Getting started -### Requirements - ### Running locally with k3d #### Prerequisites From 91d4a8c6490ba4e9e889fe367a6e26f451585451 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 2 May 2022 15:55:45 +0200 Subject: [PATCH 139/143] Use oauth mock as default authentication type --- frontend/src/environments/environment.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/environments/environment.ts b/frontend/src/environments/environment.ts index 1283d2c49..e6728d8c8 100644 --- a/frontend/src/environments/environment.ts +++ b/frontend/src/environments/environment.ts @@ -4,6 +4,6 @@ export const environment = { privacy: 'https://example.com/privacy', imprint: 'https://example.com/imprint', provider: 'PROVIDER', - authentication: 'AUTHENTICATION_TYPE', + authentication: 'OAuth mock', usernameAttribute: 'sub', }; From 25e2fc33544dc3a9fe38954098af3b981ae202a8 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 2 May 2022 16:54:18 +0200 Subject: [PATCH 140/143] Use collab-cluster as CLUSTER_NAME --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 21014067b..c53c14cdb 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ # Copyright DB Netz AG and the capella-collab-manager contributors # SPDX-License-Identifier: Apache-2.0 -CLUSTER_NAME = mycluster +CLUSTER_NAME = collab-cluster LOCAL_REGISTRY_NAME = localhost CLUSTER_REGISTRY_NAME = myregistry.localhost REGISTRY_PORT = 12345 @@ -122,7 +122,7 @@ delete-cluster: rm -f .provision-guacamole .provision-backend .provision-guacamole: - export MSYS_NO_PATHCONV=1; \ + export MSYS_NO_PATHCONV=1; \npm@8.8.0 kubectl exec --namespace $(NAMESPACE) $$(kubectl get pod --namespace $(NAMESPACE) -l id=$(RELEASE)-deployment-guacamole-guacamole --no-headers | cut -f1 -d' ') -- /opt/guacamole/bin/initdb.sh --postgres | \ kubectl exec -ti --namespace $(NAMESPACE) $$(kubectl get pod --namespace $(NAMESPACE) -l id=$(RELEASE)-deployment-guacamole-postgres --no-headers | cut -f1 -d' ') -- psql -U guacamole guacamole && \ touch .provision-guacamole From 040fbee624f796e3a4fc8804909ba1a54abe1163 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 2 May 2022 17:19:48 +0200 Subject: [PATCH 141/143] Remove inadvertently added string --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c53c14cdb..3eb55ea58 100644 --- a/Makefile +++ b/Makefile @@ -122,7 +122,7 @@ delete-cluster: rm -f .provision-guacamole .provision-backend .provision-guacamole: - export MSYS_NO_PATHCONV=1; \npm@8.8.0 + export MSYS_NO_PATHCONV=1; kubectl exec --namespace $(NAMESPACE) $$(kubectl get pod --namespace $(NAMESPACE) -l id=$(RELEASE)-deployment-guacamole-guacamole --no-headers | cut -f1 -d' ') -- /opt/guacamole/bin/initdb.sh --postgres | \ kubectl exec -ti --namespace $(NAMESPACE) $$(kubectl get pod --namespace $(NAMESPACE) -l id=$(RELEASE)-deployment-guacamole-postgres --no-headers | cut -f1 -d' ') -- psql -U guacamole guacamole && \ touch .provision-guacamole From 671968a903a507fd56c73c585bb5585467984b83 Mon Sep 17 00:00:00 2001 From: henrik997 Date: Mon, 2 May 2022 17:52:44 +0200 Subject: [PATCH 142/143] Make makefile windows compatible --- Makefile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 3eb55ea58..a5cfaa8f7 100644 --- a/Makefile +++ b/Makefile @@ -37,8 +37,8 @@ capella-download: else \ curl -L --output capella.tar.gz 'https://ftp.acc.umu.se/mirror/eclipse.org/capella/core/products/releases/5.2.0-R20211130-125709/capella-5.2.0.202111301257-linux-gtk-x86_64.tar.gz'; \ fi - -t4c-client: + +t4c-client: docker build -t t4c/client/base capella-dockerimages/t4c readonly: @@ -83,7 +83,7 @@ helm-deploy: $(RELEASE) ./helm $(MAKE) .provision-guacamole .provision-backend -open: +open: export URL=http://localhost:8080; \ if [[ "Windows_NT" == "$(OS)" ]]; \ then \ @@ -96,7 +96,7 @@ open: open "$$URL"; \ fi -clear-backend-db: +clear-backend-db: kubectl delete deployment -n t4c-manager $(RELEASE)-backend-postgres kubectl delete pvc -n t4c-manager $(RELEASE)-volume-backend-postgres $(MAKE) helm-deploy @@ -122,7 +122,7 @@ delete-cluster: rm -f .provision-guacamole .provision-backend .provision-guacamole: - export MSYS_NO_PATHCONV=1; + export MSYS_NO_PATHCONV=1; \ kubectl exec --namespace $(NAMESPACE) $$(kubectl get pod --namespace $(NAMESPACE) -l id=$(RELEASE)-deployment-guacamole-guacamole --no-headers | cut -f1 -d' ') -- /opt/guacamole/bin/initdb.sh --postgres | \ kubectl exec -ti --namespace $(NAMESPACE) $$(kubectl get pod --namespace $(NAMESPACE) -l id=$(RELEASE)-deployment-guacamole-postgres --no-headers | cut -f1 -d' ') -- psql -U guacamole guacamole && \ touch .provision-guacamole @@ -145,7 +145,7 @@ dev-backend: dev-cleanup: $(MAKE) -C backend cleanup -backend-logs: +backend-logs: kubectl logs -f -n $(NAMESPACE) -l id=$(RELEASE)-deployment-backend ns: From f7b7ae7d281a3ee6161bf3785ab54366609f1127 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Mon, 2 May 2022 17:57:29 +0200 Subject: [PATCH 143/143] Increase timeout to 10m Sometimes it takes reaaalllly long. We have to increase the timeout to 10 minutes. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index a5cfaa8f7..e6f472e94 100644 --- a/Makefile +++ b/Makefile @@ -78,7 +78,7 @@ helm-deploy: --set general.port=8080 \ --set t4cServer.apis.usageStats="http://$(RELEASE)-licence-server-mock:80/mock" \ --set t4cServer.apis.restAPI="http://$(RELEASE)-t4c-server-mock:80/mock/api/v1.0" \ - --wait --timeout 4m \ + --wait --timeout 10m \ --debug \ $(RELEASE) ./helm $(MAKE) .provision-guacamole .provision-backend

bG^xtwRU~7H$$~; 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 G>;C{rrqSB~ literal 0 HcmV?d00001 From 4ff7aeb20076dd3a43709a5c8cf64d745784977d Mon Sep 17 00:00:00 2001 From: Jamil RAICHOUNI Date: Fri, 29 Apr 2022 15:09:39 +0200 Subject: [PATCH 111/143] Pull latest README revision changes --- capella-dockerimages | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/capella-dockerimages b/capella-dockerimages index 2eb365940..c375b4b13 160000 --- a/capella-dockerimages +++ b/capella-dockerimages @@ -1 +1 @@ -Subproject commit 2eb365940cf4781de83c53ff8d89a04864f6261c +Subproject commit c375b4b13542978abaaa6a9ee95d3399a71806b2 From 2f9262cce4dbb262fb70772b79f5219cdf4202af Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 29 Apr 2022 15:11:56 +0200 Subject: [PATCH 112/143] Add commands directly under ssl key in Makefile --- mocks/oauth/Makefile | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/mocks/oauth/Makefile b/mocks/oauth/Makefile index fc92aed14..74462fdfb 100644 --- a/mocks/oauth/Makefile +++ b/mocks/oauth/Makefile @@ -1,8 +1,6 @@ CERTS_DIR = ../../certs/ -ssl: $(CERTS_DIR)localhost.p12 - -$(CERTS_DIR)localhost.p12: +ssl: export MSYS_NO_PATHCONV=1; \ openssl req -x509 -out $(CERTS_DIR)localhost.crt -keyout $(CERTS_DIR)localhost.key \ -newkey rsa:2048 -nodes -sha256 \ From a149659e5be6ba8200b29b357fc2baf51995d817 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 29 Apr 2022 15:13:04 +0200 Subject: [PATCH 113/143] Allow to call oauth mock over http --- backend/config/config_template.yaml | 2 +- mocks/oauth/conf.json | 8 +------- mocks/oauth/conf_with_cert.json | 30 +++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 mocks/oauth/conf_with_cert.json diff --git a/backend/config/config_template.yaml b/backend/config/config_template.yaml index 2b5ca5c5a..4d5c70a8b 100644 --- a/backend/config/config_template.yaml +++ b/backend/config/config_template.yaml @@ -48,7 +48,7 @@ authentication: oauth: # Only required when using provider oauth endpoints: - wellKnown: https://localhost:8080/default/.well-known/openid-configuration + wellKnown: http://localhost:8080/default/.well-known/openid-configuration tokenIssuance: authorization: diff --git a/mocks/oauth/conf.json b/mocks/oauth/conf.json index f170f0186..33c8ea93f 100644 --- a/mocks/oauth/conf.json +++ b/mocks/oauth/conf.json @@ -1,13 +1,7 @@ { "interactiveLogin": true, "httpServer": { - "type": "NettyWrapper", - "ssl" : { - "keyPassword" : "", - "keystoreFile" : "/opt/localhost.p12", - "keystoreType" : "PKCS12", - "keystorePassword" : "" - } + "type": "NettyWrapper" }, "tokenCallbacks": [ { diff --git a/mocks/oauth/conf_with_cert.json b/mocks/oauth/conf_with_cert.json new file mode 100644 index 000000000..f170f0186 --- /dev/null +++ b/mocks/oauth/conf_with_cert.json @@ -0,0 +1,30 @@ +{ + "interactiveLogin": true, + "httpServer": { + "type": "NettyWrapper", + "ssl" : { + "keyPassword" : "", + "keystoreFile" : "/opt/localhost.p12", + "keystoreType" : "PKCS12", + "keystorePassword" : "" + } + }, + "tokenCallbacks": [ + { + "issuerId": "issuer1", + "tokenExpiry": 120, + "requestMappings": [ + { + "requestParam": "scope", + "match": "openid", + "claims": { + "sub": "subByScope", + "aud": [ + "audByScope" + ] + } + } + ] + } + ] +} From 0799c90249dd1872930cd7d46e024ad65cc85078 Mon Sep 17 00:00:00 2001 From: MoritzWeber0 Date: Fri, 29 Apr 2022 15:18:54 +0200 Subject: [PATCH 114/143] Apply suggestions from #63 --- README.md | 4 ++-- doc/getting_started.md | 2 +- helm/templates/backend/backend.configmap.yaml | 6 +----- helm/templates/backend/backend.deployment.yaml | 2 -- 4 files changed, 4 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index f53326e17..549eb9198 100644 --- a/README.md +++ b/README.md @@ -45,10 +45,10 @@ Create a local K3D cluster and deploy the application ``` make create-cluster -MY_EMAIL=me@example.com make deploy +MY_NAME=username make deploy ``` -Replace `me@example.com` with your e-mail address. An administrator account will be made for this user. +Replace `username` with a username. An administrator account will be made for this user. Make sure you log in with the defined username if you want to test the admin account. Verify your deployment - components should be in the "Running" state: diff --git a/doc/getting_started.md b/doc/getting_started.md index 41f4f2352..d5edaea6e 100644 --- a/doc/getting_started.md +++ b/doc/getting_started.md @@ -10,7 +10,7 @@ You will be welcomed by a friendly screen and you can log in. The default setup ![Welcome screen](img/collab-step-1.png) -As username, provide the e-mail address you entered when deploying the cluster. If you forgot to set an e-mail address, use `me@example.com`. +As username, provide the username you entered when deploying the cluster. If you forgot to set an admin username, use `username`. ![OAuth mock](img/collab-step-2.png) diff --git a/helm/templates/backend/backend.configmap.yaml b/helm/templates/backend/backend.configmap.yaml index 4d052023e..23cbb0462 100644 --- a/helm/templates/backend/backend.configmap.yaml +++ b/helm/templates/backend/backend.configmap.yaml @@ -7,8 +7,4 @@ metadata: id: {{ .Release.Name }}-configmap-backend data: config.yaml: | - {{- tpl (.Files.Get "config/backend.yaml") . | nindent 4 }} - {{ if eq .Values.target "local" }} - oauth.crt: |- - {{ .Files.Get "config/oauth.crt" | nindent 4 }} - {{ end }} \ No newline at end of file + {{- tpl (.Files.Get "config/backend.yaml") . | nindent 4 }} \ No newline at end of file diff --git a/helm/templates/backend/backend.deployment.yaml b/helm/templates/backend/backend.deployment.yaml index 6264220f8..53a1d584a 100644 --- a/helm/templates/backend/backend.deployment.yaml +++ b/helm/templates/backend/backend.deployment.yaml @@ -30,8 +30,6 @@ spec: protocol: TCP {{ if eq .Values.target "local" }} env: - - name: REQUESTS_CA_BUNDLE - value: /etc/capellacollab/oauth.crt - name: OAUTHLIB_INSECURE_TRANSPORT value: "1" {{ end }} From 6f321dbaf702a352cce7e81bf245c5f7ce4763fd Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Thu, 21 Apr 2022 12:56:02 +0200 Subject: [PATCH 115/143] Do not use persistent volumes for local postgres databases --- helm/templates/backend/postgres.deployment.yaml | 4 ++++ helm/templates/backend/postgres.volume.yaml | 2 ++ helm/templates/guacamole/postgres.deployment.yaml | 4 ++++ helm/templates/guacamole/postgres.volume.yaml | 2 ++ 4 files changed, 12 insertions(+) diff --git a/helm/templates/backend/postgres.deployment.yaml b/helm/templates/backend/postgres.deployment.yaml index 3ce538c9b..af1da0093 100644 --- a/helm/templates/backend/postgres.deployment.yaml +++ b/helm/templates/backend/postgres.deployment.yaml @@ -17,10 +17,12 @@ spec: labels: id: {{ .Release.Name }}-deployment-backend-postgres spec: + {{ if ne .Values.target "local" }} volumes: - name: {{ .Release.Name }}-data persistentVolumeClaim: claimName: {{ .Release.Name }}-volume-backend-postgres + {{ end }} containers: - name: {{ .Release.Name }}-backend-postgres image: {{ .Values.docker.registry.external }}/postgres:14.1 @@ -54,9 +56,11 @@ spec: limits: memory: "1Gi" cpu: "1" + {{ if ne .Values.target "local" }} volumeMounts: - name: {{ .Release.Name }}-data mountPath: /var/lib/postgresql/data + {{ end }} {{ if .Values.cluster.container }} {{- toYaml .Values.cluster.containers | nindent 10 }} {{ end }} diff --git a/helm/templates/backend/postgres.volume.yaml b/helm/templates/backend/postgres.volume.yaml index 045b5ce2d..90fd60e70 100644 --- a/helm/templates/backend/postgres.volume.yaml +++ b/helm/templates/backend/postgres.volume.yaml @@ -1,4 +1,5 @@ {{ if .Values.database.backend.deploy }} +{{ if ne .Values.target "local" }} kind: PersistentVolumeClaim apiVersion: v1 metadata: @@ -11,3 +12,4 @@ spec: storage: 1Gi storageClassName: {{ .Values.database.backend.internal.storageClassName }} {{ end }} +{{ end }} \ No newline at end of file diff --git a/helm/templates/guacamole/postgres.deployment.yaml b/helm/templates/guacamole/postgres.deployment.yaml index b7865f0e2..6ec90e5fd 100644 --- a/helm/templates/guacamole/postgres.deployment.yaml +++ b/helm/templates/guacamole/postgres.deployment.yaml @@ -18,9 +18,11 @@ spec: id: {{ .Release.Name }}-deployment-guacamole-postgres spec: volumes: + {{ if ne .Values.target "local" }} - name: {{ .Release.Name }}-data persistentVolumeClaim: claimName: {{ .Release.Name }}-volume-guacamole-postgres + {{ end }} - name: {{ .Release.Name }}-initsql configMap: name: {{ .Release.Name }}-configmap-guacamole-postgres @@ -62,8 +64,10 @@ spec: memory: "1Gi" cpu: "1" volumeMounts: + {{ if ne .Values.target "local" }} - name: {{ .Release.Name }}-data mountPath: /var/lib/postgresql/data + {{ end }} - name: {{ .Release.Name }}-initsql mountPath: /docker-entrypoint-initdb.d {{ if .Values.cluster.container }} diff --git a/helm/templates/guacamole/postgres.volume.yaml b/helm/templates/guacamole/postgres.volume.yaml index fa797328b..e3bb248d8 100644 --- a/helm/templates/guacamole/postgres.volume.yaml +++ b/helm/templates/guacamole/postgres.volume.yaml @@ -1,4 +1,5 @@ {{ if .Values.database.guacamole.deploy }} +{{ if ne .Values.target "local" }} kind: PersistentVolumeClaim apiVersion: v1 metadata: @@ -11,3 +12,4 @@ spec: storage: 1Gi storageClassName: {{ .Values.database.guacamole.internal.storageClassName }} {{ end }} +{{ end }} \ No newline at end of file From 111218786ba2d9687881872dd9ee1acb710cb9ea Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Thu, 21 Apr 2022 17:21:53 +0200 Subject: [PATCH 116/143] Deploy oauth mock --- .gitignore | 6 ++- Makefile | 16 +++---- helm/templates/mock/oauth.configmap.yaml | 17 ++++++++ helm/templates/mock/oauth.deployment.yaml | 53 +++++++++++++++++++++++ helm/templates/mock/oauth.service.yaml | 17 ++++++++ helm/values.yaml | 11 ++--- mocks/oauth/Makefile | 4 +- 7 files changed, 109 insertions(+), 15 deletions(-) create mode 100644 helm/templates/mock/oauth.configmap.yaml create mode 100644 helm/templates/mock/oauth.deployment.yaml create mode 100644 helm/templates/mock/oauth.service.yaml diff --git a/.gitignore b/.gitignore index 61b78bebc..7432e8373 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,8 @@ /local .mypy_cache deployments/* -certs/* \ No newline at end of file +certs/* +/helm/config/conf.json +/helm/config/localhost.crt +/helm/config/localhost.key +/helm/config/localhost.p12 \ No newline at end of file diff --git a/Makefile b/Makefile index bc86858d2..58804a4f9 100644 --- a/Makefile +++ b/Makefile @@ -47,9 +47,15 @@ mock: docker build -t t4c/licence/mock -t $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/licence/mock mocks/licence-server docker push $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/licence/mock +oauth-mock: helm/config/localhost.p12 + cp mocks/oauth/conf.json helm/config + +helm/config/localhost.p12: + $(MAKE) -C mocks/oauth CERTS_DIR=../../helm/config/ + capella-dockerimages: capella t4c-client readonly ease -deploy: backend frontend capella mock helm-deploy +deploy: oauth-mock backend frontend capella mock helm-deploy # Deploy with full T4C support: deploy-t4c: backend frontend capella t4c-client readonly-ease mock helm-deploy @@ -73,13 +79,7 @@ helm-deploy: $(RELEASE) ./helm $(MAKE) .rollout .provision-guacamole .provision-backend -helm-cleanup: - helm uninstall \ - --kube-context k3d-$(CLUSTER_NAME) \ - --namespace $(NAMESPACE) \ - $(RELEASE) - -clear-backend-db: +clear-backend-db: kubectl delete deployment -n t4c-manager $(RELEASE)-backend-postgres kubectl delete pvc -n t4c-manager $(RELEASE)-volume-backend-postgres $(MAKE) helm-deploy diff --git a/helm/templates/mock/oauth.configmap.yaml b/helm/templates/mock/oauth.configmap.yaml new file mode 100644 index 000000000..51c55f0d7 --- /dev/null +++ b/helm/templates/mock/oauth.configmap.yaml @@ -0,0 +1,17 @@ +{{ if eq .Values.target "local" }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Release.Name }}-oauth-mock + namespace: {{ .Release.Namespace }} + labels: + id: {{ .Release.Name }}-configmap-oauth-mock +data: + conf.json: |- + {{ .Files.Get "config/conf.json" | nindent 4 }} + +binaryData: + localhost.p12: |- + {{ .Files.Get "config/localhost.p12" | b64enc | nindent 4 }} + +{{ end }} \ No newline at end of file diff --git a/helm/templates/mock/oauth.deployment.yaml b/helm/templates/mock/oauth.deployment.yaml new file mode 100644 index 000000000..13689abad --- /dev/null +++ b/helm/templates/mock/oauth.deployment.yaml @@ -0,0 +1,53 @@ +{{ if eq .Values.target "local" }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ .Release.Name }}-oauth-mock + labels: + id: {{ .Release.Name }}-deployment-oauth-mock +spec: + replicas: 1 + selector: + matchLabels: + id: {{ .Release.Name }}-deployment-oauth-mock + template: + metadata: + labels: + id: {{ .Release.Name }}-deployment-oauth-mock + spec: + volumes: + - name: {{ .Release.Name }}-oauth-mock + configMap: + name: {{ .Release.Name }}-oauth-mock + containers: + - name: {{ .Release.Name }}-oauth-mock + image: ghcr.io/navikt/mock-oauth2-server:0.4.4 + ports: + - name: https + containerPort: 8080 + protocol: TCP + # livenessProbe: + # httpGet: + # path: /isalive + # port: https + # readinessProbe: + # httpGet: + # path: /isalive + # port: https + volumeMounts: + - name: {{ .Release.Name }}-oauth-mock + mountPath: /opt + env: + - name: JSON_CONFIG_PATH + value: /opt/conf.json + resources: + limits: + cpu: "0.1" + memory: 200Mi + requests: + cpu: "0.1" + memory: 20Mi + {{ if .Values.cluster.container }} + {{- toYaml .Values.cluster.containers | nindent 10 }} + {{ end }} +{{ end }} diff --git a/helm/templates/mock/oauth.service.yaml b/helm/templates/mock/oauth.service.yaml new file mode 100644 index 000000000..3eed2d86e --- /dev/null +++ b/helm/templates/mock/oauth.service.yaml @@ -0,0 +1,17 @@ +{{ if eq .Values.target "local" }} +apiVersion: v1 +kind: Service +metadata: + name: {{ .Release.Name }}-oauth-mock + labels: + id: {{ .Release.Name }}-service-oauth-mock +spec: + type: ClusterIP + selector: + id: {{ .Release.Name }}-deployment-oauth-mock + ports: + - port: 8080 + targetPort: https + protocol: TCP + name: https +{{ end }} diff --git a/helm/values.yaml b/helm/values.yaml index afc7c3f43..ec8f81976 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -105,17 +105,18 @@ backend: authentication: provider: oauth # oauth | azure jwt: - usernameClaim: sub + usernameClaim: sub # azure: preferred_username oauth: # Only required when using provider oauth endpoints: # Endpoint that issues JWT Tokens - tokenIssuance: https://localhost:8080/mock/oauth/default/token + tokenIssuance: na # Endpoint that authorizes the User - authorization: https://localhost:8080/mock/oauth/default/authorize - # wellKnown Endpoint - wellKnown: https://localhost:8081/mock/oauth/default/.well-known/openid-configuration + authorization: na + # Or, define a wellKnown Endpoint and read token/auth urls from there: + wellKnown: https://dev-t4c-manager-oauth-mock:8080/default/.well-known/openid-configuration + audience: default diff --git a/mocks/oauth/Makefile b/mocks/oauth/Makefile index f467b28da..fc92aed14 100644 --- a/mocks/oauth/Makefile +++ b/mocks/oauth/Makefile @@ -1,6 +1,8 @@ CERTS_DIR = ../../certs/ -ssl: +ssl: $(CERTS_DIR)localhost.p12 + +$(CERTS_DIR)localhost.p12: export MSYS_NO_PATHCONV=1; \ openssl req -x509 -out $(CERTS_DIR)localhost.crt -keyout $(CERTS_DIR)localhost.key \ -newkey rsa:2048 -nodes -sha256 \ From 9a754caa5a64acc83c7e45a0d3d5036a6eb6bb35 Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Fri, 22 Apr 2022 11:40:46 +0200 Subject: [PATCH 117/143] Make backend and oauth mock interact --- .gitignore | 6 +++--- Makefile | 12 ++++++++---- helm/templates/backend/backend.configmap.yaml | 6 +++++- helm/templates/backend/backend.deployment.yaml | 5 +++++ helm/templates/mock/oauth.configmap.yaml | 2 +- helm/templates/mock/oauth.deployment.yaml | 2 ++ helm/templates/routing/nginx.ingress.yaml | 7 +++++++ helm/values.yaml | 1 - 8 files changed, 31 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index 7432e8373..3bc74a236 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,6 @@ deployments/* certs/* /helm/config/conf.json -/helm/config/localhost.crt -/helm/config/localhost.key -/helm/config/localhost.p12 \ No newline at end of file +/helm/config/oauth.crt +/helm/config/oauth.key +/helm/config/oauth.p12 \ No newline at end of file diff --git a/Makefile b/Makefile index 58804a4f9..c5c020500 100644 --- a/Makefile +++ b/Makefile @@ -47,12 +47,16 @@ mock: docker build -t t4c/licence/mock -t $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/licence/mock mocks/licence-server docker push $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/licence/mock -oauth-mock: helm/config/localhost.p12 +oauth-mock: helm/config/oauth.p12 cp mocks/oauth/conf.json helm/config -helm/config/localhost.p12: - $(MAKE) -C mocks/oauth CERTS_DIR=../../helm/config/ - +helm/config/oauth.p12: Makefile + openssl req -x509 -out helm/config/oauth.crt -keyout helm/config/oauth.key \ + -newkey rsa:2048 -nodes -sha256 \ + -subj '/CN=$(RELEASE)-oauth-mock' \ + -addext "subjectAltName = DNS:localhost, DNS:$(RELEASE)-oauth-mock" + openssl pkcs12 -export -in helm/config/oauth.crt -inkey helm/config/oauth.key -out helm/config/oauth.p12 -passout "pass:" + capella-dockerimages: capella t4c-client readonly ease deploy: oauth-mock backend frontend capella mock helm-deploy diff --git a/helm/templates/backend/backend.configmap.yaml b/helm/templates/backend/backend.configmap.yaml index 23cbb0462..4d052023e 100644 --- a/helm/templates/backend/backend.configmap.yaml +++ b/helm/templates/backend/backend.configmap.yaml @@ -7,4 +7,8 @@ metadata: id: {{ .Release.Name }}-configmap-backend data: config.yaml: | - {{- tpl (.Files.Get "config/backend.yaml") . | nindent 4 }} \ No newline at end of file + {{- tpl (.Files.Get "config/backend.yaml") . | nindent 4 }} + {{ if eq .Values.target "local" }} + oauth.crt: |- + {{ .Files.Get "config/oauth.crt" | nindent 4 }} + {{ end }} \ No newline at end of file diff --git a/helm/templates/backend/backend.deployment.yaml b/helm/templates/backend/backend.deployment.yaml index 72877ecd9..3c0ee87d1 100644 --- a/helm/templates/backend/backend.deployment.yaml +++ b/helm/templates/backend/backend.deployment.yaml @@ -28,6 +28,11 @@ spec: - name: http containerPort: 8000 protocol: TCP + {{ if eq .Values.target "local" }} + env: + - name: REQUESTS_CA_BUNDLE + value: /etc/capellacollab/oauth.crt + {{ end }} livenessProbe: httpGet: path: /healthcheck diff --git a/helm/templates/mock/oauth.configmap.yaml b/helm/templates/mock/oauth.configmap.yaml index 51c55f0d7..8e325c365 100644 --- a/helm/templates/mock/oauth.configmap.yaml +++ b/helm/templates/mock/oauth.configmap.yaml @@ -12,6 +12,6 @@ data: binaryData: localhost.p12: |- - {{ .Files.Get "config/localhost.p12" | b64enc | nindent 4 }} + {{ .Files.Get "config/oauth.p12" | b64enc | nindent 4 }} {{ end }} \ No newline at end of file diff --git a/helm/templates/mock/oauth.deployment.yaml b/helm/templates/mock/oauth.deployment.yaml index 13689abad..32f7ebbc5 100644 --- a/helm/templates/mock/oauth.deployment.yaml +++ b/helm/templates/mock/oauth.deployment.yaml @@ -30,10 +30,12 @@ spec: # httpGet: # path: /isalive # port: https + # scheme: HTTPS # readinessProbe: # httpGet: # path: /isalive # port: https + # scheme: HTTPS volumeMounts: - name: {{ .Release.Name }}-oauth-mock mountPath: /opt diff --git a/helm/templates/routing/nginx.ingress.yaml b/helm/templates/routing/nginx.ingress.yaml index 5aec47525..22cb3d786 100644 --- a/helm/templates/routing/nginx.ingress.yaml +++ b/helm/templates/routing/nginx.ingress.yaml @@ -39,6 +39,13 @@ spec: port: number: 8080 {{ if eq .Values.target "local" }} + - path: /mock/oauth + pathType: Prefix + backend: + service: + name: {{ .Release.Name }}-oauth-mock + port: + number: 8080 - path: /mock pathType: Prefix backend: diff --git a/helm/values.yaml b/helm/values.yaml index ec8f81976..41601390d 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -117,7 +117,6 @@ backend: # Or, define a wellKnown Endpoint and read token/auth urls from there: wellKnown: https://dev-t4c-manager-oauth-mock:8080/default/.well-known/openid-configuration - audience: default publicKey: | From 75753879da3a9b42a8119ef14d625ed46fdaa23a Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Fri, 22 Apr 2022 12:44:41 +0200 Subject: [PATCH 118/143] Expose oauth mock service --- helm/templates/mock/oauth.deployment.yaml | 26 +++++++++++------------ helm/templates/routing/nginx.ingress.yaml | 2 +- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/helm/templates/mock/oauth.deployment.yaml b/helm/templates/mock/oauth.deployment.yaml index 32f7ebbc5..271c35d1f 100644 --- a/helm/templates/mock/oauth.deployment.yaml +++ b/helm/templates/mock/oauth.deployment.yaml @@ -26,16 +26,14 @@ spec: - name: https containerPort: 8080 protocol: TCP - # livenessProbe: - # httpGet: - # path: /isalive - # port: https - # scheme: HTTPS - # readinessProbe: - # httpGet: - # path: /isalive - # port: https - # scheme: HTTPS + livenessProbe: + httpGet: + path: /isalive + port: https + scheme: HTTPS + readinessProbe: + tcpSocket: + port: 8080 volumeMounts: - name: {{ .Release.Name }}-oauth-mock mountPath: /opt @@ -44,11 +42,11 @@ spec: value: /opt/conf.json resources: limits: - cpu: "0.1" - memory: 200Mi + cpu: "0.5" + memory: 100Mi requests: - cpu: "0.1" - memory: 20Mi + cpu: "0.5" + memory: 40Mi {{ if .Values.cluster.container }} {{- toYaml .Values.cluster.containers | nindent 10 }} {{ end }} diff --git a/helm/templates/routing/nginx.ingress.yaml b/helm/templates/routing/nginx.ingress.yaml index 22cb3d786..429ae2289 100644 --- a/helm/templates/routing/nginx.ingress.yaml +++ b/helm/templates/routing/nginx.ingress.yaml @@ -39,7 +39,7 @@ spec: port: number: 8080 {{ if eq .Values.target "local" }} - - path: /mock/oauth + - path: /default pathType: Prefix backend: service: From a186cc5a855c8ce5052e6a19c9f9b52a4ae0174c Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Fri, 22 Apr 2022 13:22:45 +0200 Subject: [PATCH 119/143] Simplify cluster Add a proper name, and expose on port 8080 by default. In doing so, we avoid some port conflicts when providing (internal) urls. --- Makefile | 17 ++++++++++------- backend/config/config_template.yaml | 8 ++++---- helm/values.yaml | 2 +- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index c5c020500..49f13387d 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -CLUSTER_NAME = mycluster +CLUSTER_NAME = collab-cluster LOCAL_REGISTRY_NAME = localhost CLUSTER_REGISTRY_NAME = myregistry.localhost REGISTRY_PORT = 12345 @@ -75,7 +75,7 @@ helm-deploy: $$(test -f secrets.yaml && echo "--values secrets.yaml") \ --set docker.registry.internal=k3d-$(CLUSTER_REGISTRY_NAME):$(REGISTRY_PORT) \ --set database.backend.initialAdmin=$(MY_NAME) \ - --set general.port=8081 \ + --set general.port=8080 \ --set t4cServer.apis.usageStats="http://$(RELEASE)-licence-server-mock:80/mock" \ --set t4cServer.apis.restAPI="http://$(RELEASE)-t4c-server-mock:80/mock/api/v1.0" \ --wait --timeout 4m \ @@ -104,7 +104,7 @@ create-cluster: k3d registry list $(CLUSTER_REGISTRY_NAME) 2>&- || k3d registry create $(CLUSTER_REGISTRY_NAME) --port $(REGISTRY_PORT) k3d cluster list $(CLUSTER_NAME) 2>&- || k3d cluster create $(CLUSTER_NAME) \ --registry-use k3d-$(CLUSTER_REGISTRY_NAME):$(REGISTRY_PORT) \ - --port "8081:80@loadbalancer" + --port "8080:80@loadbalancer" kubectl cluster-info delete-cluster: @@ -118,10 +118,10 @@ delete-cluster: touch .provision-guacamole .provision-backend: - echo "insert into repository_user_association values ('$(MY_EMAIL)', 'default', 'WRITE', 'MANAGER');" | kubectl exec -ti --namespace $(NAMESPACE) $$(kubectl get pod --namespace $(NAMESPACE) -l id=$(RELEASE)-deployment-backend-postgres --no-headers | cut -f1 -d' ') -- psql -U backend backend && \ + echo "insert into repository_user_association values ('$(MY_EMAIL)', 'default', 'WRITE', 'MANAGER');" | kubectl exec --namespace $(NAMESPACE) $$(kubectl get pod --namespace $(NAMESPACE) -l id=$(RELEASE)-deployment-backend-postgres --no-headers | cut -f1 -d' ') -- psql -U backend backend && \ touch .provision-backend -.PHONY: backend frontend capella deploy undeploy create-cluster delete-cluster persistent-volume +.PHONY: backend frontend capella oauth-mock deploy undeploy create-cluster delete-cluster persistent-volume ns # Execute with `make -j2 dev` dev: dev-frontend dev-backend @@ -135,5 +135,8 @@ dev-backend: dev-cleanup: $(MAKE) -C backend cleanup -backend-logs: - kubectl logs -f -n $(NAMESPACE) -l id=$(RELEASE)-deployment-backend \ No newline at end of file +backend-logs: + kubectl logs -f -n $(NAMESPACE) -l id=$(RELEASE)-deployment-backend + +ns: + kubectl config set-context k3d-$(CLUSTER_NAME) --namespace=$(NAMESPACE) diff --git a/backend/config/config_template.yaml b/backend/config/config_template.yaml index e044df66f..2b5ca5c5a 100644 --- a/backend/config/config_template.yaml +++ b/backend/config/config_template.yaml @@ -34,8 +34,8 @@ operators: extensions: guacamole: - baseURI: http://localhost:8081/guacamole - publicURI: http://localhost:8081/guacamole + baseURI: http://localhost:8080/guacamole + publicURI: http://localhost:8080/guacamole username: guacadmin password: guacadmin @@ -81,8 +81,8 @@ authentication: modelsources: t4c: - usageAPI: http://localhost:8081/mock - restAPI: http://localhost:8081/mock/api/v1.0 + usageAPI: http://localhost:8080/mock + restAPI: http://localhost:8080/mock/api/v1.0 username: sampleuser password: samplepassword diff --git a/helm/values.yaml b/helm/values.yaml index 41601390d..7ddda206e 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -132,7 +132,7 @@ backend: # OAUTH2 Client Secret secret: tbd - redirectURI: http://localhost:8081/oauth2/callback + redirectURI: http://localhost:8080/oauth2/callback azure: # Only required when using provider oauth From baf83caf4fba0340393027072c3144a34b77f71a Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Fri, 22 Apr 2022 13:30:52 +0200 Subject: [PATCH 120/143] Use oauth mock over http For local (test) use only. --- .gitignore | 4 ---- Makefile | 10 -------- helm/config/oauth.json | 24 +++++++++++++++++++ .../templates/backend/backend.deployment.yaml | 2 ++ helm/templates/mock/oauth.configmap.yaml | 8 ++----- helm/templates/mock/oauth.deployment.yaml | 7 +++--- helm/templates/mock/oauth.service.yaml | 4 ++-- helm/values.yaml | 2 +- 8 files changed, 34 insertions(+), 27 deletions(-) create mode 100644 helm/config/oauth.json diff --git a/.gitignore b/.gitignore index 3bc74a236..7740b8f56 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,3 @@ .mypy_cache deployments/* certs/* -/helm/config/conf.json -/helm/config/oauth.crt -/helm/config/oauth.key -/helm/config/oauth.p12 \ No newline at end of file diff --git a/Makefile b/Makefile index 49f13387d..cfcb84c36 100644 --- a/Makefile +++ b/Makefile @@ -47,16 +47,6 @@ mock: docker build -t t4c/licence/mock -t $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/licence/mock mocks/licence-server docker push $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/licence/mock -oauth-mock: helm/config/oauth.p12 - cp mocks/oauth/conf.json helm/config - -helm/config/oauth.p12: Makefile - openssl req -x509 -out helm/config/oauth.crt -keyout helm/config/oauth.key \ - -newkey rsa:2048 -nodes -sha256 \ - -subj '/CN=$(RELEASE)-oauth-mock' \ - -addext "subjectAltName = DNS:localhost, DNS:$(RELEASE)-oauth-mock" - openssl pkcs12 -export -in helm/config/oauth.crt -inkey helm/config/oauth.key -out helm/config/oauth.p12 -passout "pass:" - capella-dockerimages: capella t4c-client readonly ease deploy: oauth-mock backend frontend capella mock helm-deploy diff --git a/helm/config/oauth.json b/helm/config/oauth.json new file mode 100644 index 000000000..33c8ea93f --- /dev/null +++ b/helm/config/oauth.json @@ -0,0 +1,24 @@ +{ + "interactiveLogin": true, + "httpServer": { + "type": "NettyWrapper" + }, + "tokenCallbacks": [ + { + "issuerId": "issuer1", + "tokenExpiry": 120, + "requestMappings": [ + { + "requestParam": "scope", + "match": "openid", + "claims": { + "sub": "subByScope", + "aud": [ + "audByScope" + ] + } + } + ] + } + ] +} diff --git a/helm/templates/backend/backend.deployment.yaml b/helm/templates/backend/backend.deployment.yaml index 3c0ee87d1..6264220f8 100644 --- a/helm/templates/backend/backend.deployment.yaml +++ b/helm/templates/backend/backend.deployment.yaml @@ -32,6 +32,8 @@ spec: env: - name: REQUESTS_CA_BUNDLE value: /etc/capellacollab/oauth.crt + - name: OAUTHLIB_INSECURE_TRANSPORT + value: "1" {{ end }} livenessProbe: httpGet: diff --git a/helm/templates/mock/oauth.configmap.yaml b/helm/templates/mock/oauth.configmap.yaml index 8e325c365..73d782cb1 100644 --- a/helm/templates/mock/oauth.configmap.yaml +++ b/helm/templates/mock/oauth.configmap.yaml @@ -7,11 +7,7 @@ metadata: labels: id: {{ .Release.Name }}-configmap-oauth-mock data: - conf.json: |- - {{ .Files.Get "config/conf.json" | nindent 4 }} - -binaryData: - localhost.p12: |- - {{ .Files.Get "config/oauth.p12" | b64enc | nindent 4 }} + oauth.json: |- + {{ .Files.Get "config/oauth.json" | nindent 4 }} {{ end }} \ No newline at end of file diff --git a/helm/templates/mock/oauth.deployment.yaml b/helm/templates/mock/oauth.deployment.yaml index 271c35d1f..34ea72466 100644 --- a/helm/templates/mock/oauth.deployment.yaml +++ b/helm/templates/mock/oauth.deployment.yaml @@ -23,14 +23,13 @@ spec: - name: {{ .Release.Name }}-oauth-mock image: ghcr.io/navikt/mock-oauth2-server:0.4.4 ports: - - name: https + - name: http containerPort: 8080 protocol: TCP livenessProbe: httpGet: path: /isalive - port: https - scheme: HTTPS + port: http readinessProbe: tcpSocket: port: 8080 @@ -39,7 +38,7 @@ spec: mountPath: /opt env: - name: JSON_CONFIG_PATH - value: /opt/conf.json + value: /opt/oauth.json resources: limits: cpu: "0.5" diff --git a/helm/templates/mock/oauth.service.yaml b/helm/templates/mock/oauth.service.yaml index 3eed2d86e..a4f5f7f1f 100644 --- a/helm/templates/mock/oauth.service.yaml +++ b/helm/templates/mock/oauth.service.yaml @@ -11,7 +11,7 @@ spec: id: {{ .Release.Name }}-deployment-oauth-mock ports: - port: 8080 - targetPort: https + targetPort: http protocol: TCP - name: https + name: http {{ end }} diff --git a/helm/values.yaml b/helm/values.yaml index 7ddda206e..1ab5fe12f 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -115,7 +115,7 @@ backend: # Endpoint that authorizes the User authorization: na # Or, define a wellKnown Endpoint and read token/auth urls from there: - wellKnown: https://dev-t4c-manager-oauth-mock:8080/default/.well-known/openid-configuration + wellKnown: http://dev-t4c-manager-oauth-mock:8080/default/.well-known/openid-configuration audience: default From 77cfafcf67c8b4c291fc07e1d6ce5a2caab8841d Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Fri, 22 Apr 2022 14:24:05 +0200 Subject: [PATCH 121/143] Add local frontend config Works on the local cluster out of the box. --- Makefile | 5 +---- frontend/Dockerfile | 4 +++- frontend/angular.json | 15 +++++++++++++++ frontend/src/environments/environment.ts | 2 +- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index cfcb84c36..09e5fff20 100644 --- a/Makefile +++ b/Makefile @@ -18,7 +18,7 @@ backend: docker push $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/capella/collab/backend frontend: - docker build -t t4c/client/frontend -t $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/capella/collab/frontend frontend + docker build --build-arg CONFIGURATION=local -t t4c/client/frontend -t $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/capella/collab/frontend frontend docker push $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/capella/collab/frontend capella: @@ -79,9 +79,6 @@ clear-backend-db: $(MAKE) helm-deploy rollout: backend frontend - $(MAKE) .rollout - -.rollout: kubectl --context k3d-$(CLUSTER_NAME) rollout restart deployment -n $(NAMESPACE) $(RELEASE)-backend kubectl --context k3d-$(CLUSTER_NAME) rollout restart deployment -n $(NAMESPACE) $(RELEASE)-frontend diff --git a/frontend/Dockerfile b/frontend/Dockerfile index a94dc08c9..cceb456ca 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -1,10 +1,12 @@ ARG BASE_IMAGE=node:17 FROM $BASE_IMAGE as build +ARG CONFIGURATION=production + COPY ./ /work/ WORKDIR /work RUN npm install -RUN npm run build +RUN npm run build -- --configuration=${CONFIGURATION} FROM nginxinc/nginx-unprivileged:latest COPY nginx.conf /etc/nginx/nginx.conf diff --git a/frontend/angular.json b/frontend/angular.json index 1825f7171..8576b96e9 100644 --- a/frontend/angular.json +++ b/frontend/angular.json @@ -70,6 +70,21 @@ "with": "src/environments/environment.dev.ts" } ] + }, + "local": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "2mb", + "maximumError": "5mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" } }, "defaultConfiguration": "production" diff --git a/frontend/src/environments/environment.ts b/frontend/src/environments/environment.ts index 970abb3ea..1283d2c49 100644 --- a/frontend/src/environments/environment.ts +++ b/frontend/src/environments/environment.ts @@ -5,5 +5,5 @@ export const environment = { imprint: 'https://example.com/imprint', provider: 'PROVIDER', authentication: 'AUTHENTICATION_TYPE', - usernameAttribute: 'attribute', + usernameAttribute: 'sub', }; From cbcb24b36b97e69b75d384ddf9b0d40d69bc7da9 Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Fri, 22 Apr 2022 14:50:55 +0200 Subject: [PATCH 122/143] Allow authorization endpoint to be overruled in backend --- .../t4cclient/core/authentication/provider/oauth/flow.py | 6 +++++- helm/values.yaml | 9 ++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/backend/t4cclient/core/authentication/provider/oauth/flow.py b/backend/t4cclient/core/authentication/provider/oauth/flow.py index 35caea669..436a3bfed 100644 --- a/backend/t4cclient/core/authentication/provider/oauth/flow.py +++ b/backend/t4cclient/core/authentication/provider/oauth/flow.py @@ -20,6 +20,7 @@ def get_auth_redirect_url() -> t.Dict[str, str]: read_well_known()["authorization_endpoint"], grant_type="authorization_code", ) + return {"auth_url": auth_url, "state": state} @@ -52,8 +53,11 @@ def read_well_known() -> dict[str, t.Any]: authorization_endpoint = resp["authorization_endpoint"] token_endpoint = resp["token_endpoint"] - else: + + if cfg["endpoints"]["authorization"]: authorization_endpoint = cfg["endpoints"]["authorization"] + + if cfg["endpoints"]["tokenIssuance"]: token_endpoint = cfg["endpoints"]["tokenIssuance"] return { diff --git a/helm/values.yaml b/helm/values.yaml index 1ab5fe12f..51b1aa26d 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -110,12 +110,11 @@ backend: oauth: # Only required when using provider oauth endpoints: - # Endpoint that issues JWT Tokens - tokenIssuance: na - # Endpoint that authorizes the User - authorization: na - # Or, define a wellKnown Endpoint and read token/auth urls from there: wellKnown: http://dev-t4c-manager-oauth-mock:8080/default/.well-known/openid-configuration + # Override endpoint that issues JWT Tokens + tokenIssuance: "" + # Override endpoint that authorizes the User + authorization: http://localhost:8080/default/authorize audience: default From 4daf609149351e8de41043f7758de563e05316e5 Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Fri, 22 Apr 2022 15:02:45 +0200 Subject: [PATCH 123/143] Automatically download Capella --- Makefile | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 09e5fff20..504bf092b 100644 --- a/Makefile +++ b/Makefile @@ -21,13 +21,16 @@ frontend: docker build --build-arg CONFIGURATION=local -t t4c/client/frontend -t $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/capella/collab/frontend frontend docker push $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/capella/collab/frontend -capella: +capella: capella-dockerimages/capella/archives/capella.tar.gz docker build -t base capella-dockerimages/base docker build -t capella/base capella-dockerimages/capella docker build -t capella/remote -t $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/client/remote capella-dockerimages/remote docker push $(LOCAL_REGISTRY_NAME):$(REGISTRY_PORT)/t4c/client/remote -t4c-client: +capella-dockerimages/capella/archives/capella.tar.gz: + curl -L --output $@ 'https://ftp.acc.umu.se/mirror/eclipse.org/capella/core/products/releases/5.2.0-R20211130-125709/capella-5.2.0.202111301257-linux-gtk-x86_64.tar.gz' + +t4c-client: docker build -t t4c/client/base capella-dockerimages/t4c readonly: @@ -71,7 +74,7 @@ helm-deploy: --wait --timeout 4m \ --debug \ $(RELEASE) ./helm - $(MAKE) .rollout .provision-guacamole .provision-backend + $(MAKE) .provision-guacamole .provision-backend clear-backend-db: kubectl delete deployment -n t4c-manager $(RELEASE)-backend-postgres From 40dd96632c44a4268340a1b0917f23356cbf095e Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Fri, 22 Apr 2022 16:13:31 +0200 Subject: [PATCH 124/143] Add Getting Started guide Step by step set up a "remote" Capella session. --- README.md | 26 ++++++++++++++----------- doc/getting_started.md | 40 ++++++++++++++++++++++++++++++++++++++ doc/img/collab-step-1.png | Bin 0 -> 31720 bytes doc/img/collab-step-2.png | Bin 0 -> 27493 bytes doc/img/collab-step-3.png | Bin 0 -> 47581 bytes doc/img/collab-step-4.png | Bin 0 -> 56032 bytes doc/img/collab-step-5.png | Bin 0 -> 63579 bytes 7 files changed, 55 insertions(+), 11 deletions(-) create mode 100644 doc/getting_started.md create mode 100644 doc/img/collab-step-1.png create mode 100644 doc/img/collab-step-2.png create mode 100644 doc/img/collab-step-3.png create mode 100644 doc/img/collab-step-4.png create mode 100644 doc/img/collab-step-5.png diff --git a/README.md b/README.md index 35bf8b398..55e32ba04 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ We have more exciting features on our roadmap, like integration of templates, pl ## Running locally with K3D ### Prerequisites + To deploy the application you'll need: * [Docker](https://docs.docker.com/engine/install/ubuntu/) * [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/) @@ -38,36 +39,39 @@ When you have all that installed you can simply do the following: ``` git clone --recurse-submodules https://github.com/DSD-DBS/capella-collab-manager.git cd capella-collab-manager -make create-cluster # this creates cluster and container registry ``` -At this point, have a look at the [frondend README](frontend/README.md) in order to configure the frontend. -You'll need an `environment.prod.ts` file in the right location. +Create a local K3D cluster and deploy the application -To build the Capella images you'll need to download Capella (binary!) and copy the archive to `capella-dockerimages/capella/archives`. For instructions, please refer to the [capella-dockerimages' README](capella-dockerimages/README.md). +``` +make create-cluster +MY_EMAIL=me@example.com make deploy +``` -Once you've configured the frontend and capella images, continue with your deployment: +Replace `me@example.com` with your e-mail address. An administrator account will be made for this user. + +Verify your deployment - components should be in the "Running" state: ``` -MY_EMAIL=me@mydomain.com make deploy # build and deploy the manager app -kubectl get pods --namespace=t4c-manager # verify your deployment - components should be in "Running" state +kubectl get pods --namespace=t4c-manager ``` -Replace `me@domain.com` with your e-mail address. An administrator account will be made for this user. - Important! If you use Windows and the Git Bash to execute the commands, you have to set the environment variable: `MSYS_NO_PATHCONV=1`. Otherwise the commands will break with UNIX paths, because the Git Bash tries to add a Windows path prefix. If something goes wrong, please open an issue on Github. -If something goes wrong, please open an issue on Github. - To clean up the environment, simply run: ``` make delete-cluster ``` +### Starting a session + +Once the cluster is installed and all services are running (`kubectl get pods`), you can get started. Follow our +[Getting started guide](doc/getting_started.md) and be up and running in a few minutes. + ## Deployment ## Running on a cluster diff --git a/doc/getting_started.md b/doc/getting_started.md new file mode 100644 index 000000000..41f4f2352 --- /dev/null +++ b/doc/getting_started.md @@ -0,0 +1,40 @@ +# Getting started + +This guide describes the steps to get started with the Capella Collaboration Manager. + +Before you start, make sure you have a running environment. For instructions on how to set up such an environment, please refer to the [README](../README.md). + +First open a browser and go to http://localhost:8080. + +You will be welcomed by a friendly screen and you can log in. The default setup is running an OAuth mock service for authentication. + +![Welcome screen](img/collab-step-1.png) + +As username, provide the e-mail address you entered when deploying the cluster. If you forgot to set an e-mail address, use `me@example.com`. + +![OAuth mock](img/collab-step-2.png) + +You'll be returned to the Collaboration manager. Now you can start a session. Select _Persistent Workspace_ and hit _Request Session_. + +![Logged in](img/collab-step-3.png) + +The system will now schedule and start a fresh workspace. +Wait a bit for the workspace to be available + +![Starting a session](img/collab-step-4.png) + +Once the session is ready, click _Connect to Session_ and a new tab should open. After a few seconds you should see the +Capella splash screen and a workspace will be shown in your browser. + +![Capella welcome screen](img/collab-step-5.png) + + +## What's next + +This introduction only scratches the surface of what's possible with the Collaboration Manager. + +More advanced features include: + +* Read-only models from Git +* Connect to a Team4Capella server (commercial product) +* Manage users and user access diff --git a/doc/img/collab-step-1.png b/doc/img/collab-step-1.png new file mode 100644 index 0000000000000000000000000000000000000000..5bad7cac9a7460f3bfef07c9daced7018c10b5f7 GIT binary patch literal 31720 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 literal 0 HcmV?d00001 diff --git a/doc/img/collab-step-3.png b/doc/img/collab-step-3.png new file mode 100644 index 0000000000000000000000000000000000000000..2230adf940481fad148f8432c21568fa8bbf3a6a GIT binary patch literal 47581 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 z zb6^0bZ;QRd1^0)st9XuCd(0_K5u}%x_=DdJq)} z#1r#8JpVQfPtnK3e}B9^r%%rh7d143)5BZX0R#I7 zI8Mvpf3AbXaN=io5zXC}HE{Mx6jL1q(~uTYK+s18D|^-CZ;C zh9baRTfNX@GFW%+^&CtFY6}6L{CKnZ)=S*5S*BX^ZFo&|A9W+?`Wor}bbYvmwJmeI z%h%eJj;JNvEY00*-lBu~lz_n;t zSWtU569!FsFCJ!>mVWhyz{@Ku51MhRfBr1XPeKR$+|T~KqC$L@yV+rV6v#QX9)l~V zRtz}-|B5|d@2In!{G!i_@B4603yflPl<5PWtDjZ_u#(M=o8n)-u;SwGnVFfXX}3mQ z?F^3?>j62z$e|$_k;gyK>8u8$1>zx@?8Z=%;V6`plv}OONR$BPl{Gh~*Vl8dtgP@m z{ed9nwWDBUjJmybBZ-&9CLioz#4Q~YfDi7aFi+#L(}XM1?uw1H`)TK1t9)B7hwn9d zpO~5&TISC384RumDDK;J!tf5>oiF+CtrY1P@56)l1jZEl!Ey|dT(w8F{HCIx8~*T1 z4J|Mr5aCh}-?9!NM5ue7)4)#~0gu3Dj9`&2AL9ny1m*?9P)({Opv{1O8M5b-O?d?+ zqvziScAHJi=QSc0b8_Kmgnr|#J9l@esh>Z&={gX=h2^vqWN`zLUP9J85N(c({I+`GQ^!m^`evH^APE8djVH^7u(S{yv{ebET^h^(0TLQ^yzxyx9Skv6<`Q1{2P`ZGC9`7b(e;+fYvJTLZ}7QYl16a*=?qx4B zZmTX|R(-ZTqGb)G5Mqweb7=iWD&(2xCaP?$LpVRr6HCf<+`9Thry(2>n=Uak^VdmD zPyFhc#agR#ECENb5xbm>3>+#ds@+;^l6VLl4U1 zf;FAjNFng(GXH1}vas(xjetPbMwc%(QWy}2L(tIBOf4+|Xy;m9cO6~y=cWk&Uv*H} z(9qB$Ea|EYu-P^o9ws8^UkDU1AoYi%QsW@iIq%2-D`0J7(`U!)+KO!c1&b zU}Pf@ROd^~`1+T0wg5xI={yosyP6jOb$M4sWbnUaqU(Nul7j~?-xtp_=ab?e-BH)k z3dva5YM?aeQrx8~t&e1jhzV)&?s-47n~p=X2SnM*rD{?8jR3THd4%8G>2d6oeh={H zcbq9vIZ0Tg`Iee0=i;K_x7-_&27m~c-7h0fF3$LzcVPe2Za1MN=Cii|o`ta6tV;>} z_=K|<@XQ44njW8!dn)&yp1l3)tq@V;;#&1tp}tZ8#Jc%nY2=SMbV8L}N)!MHxhnLl zEspd6hyaext!%pZ!+?gC785Pv>2W84kl%^I#@8twxDTcO=a!RE3lQMICJgt-lL}ec z*#S3(0SjZynUyITC?XkwR@&a49Ucy+tE*ePO3Ka0r>T~xs;5Vs6d6BaX7X^p4g?lS zX=(EI_AC|+S&fa{_ovH}4i2oPrKMN(9qZ?s?!o}6Y6x;aS-6@}WZUxS_}78Y2JZ8S zd{L5fzYdoh=wtBN_N!YqqWJ{yad1cmu{%%jR48FQBCs=vC}wBIPxHRC@1Yj^hR5wO zYXM9h$cvbnPkgi?iY}@>pH=mKYT^ToqJ)lqc5W@!m|(o!iB5Ae$8TeWCfj6@-ZW6y&Kzo@7ZC@#F09?0=tUc8{GEH8rKp+b(Q*wAC(G`L!EU%gaaQ`kqHp=l%u| ze_~=HmWU@Buy-s3m`o9WK>$U{N=ib37yi9H3i)voDnSW{PB#AYD>OiJC;?{~A6LS{ z#&+f>i6s$82H+h?OmkU`7gSV46%|qayA{BU?=>|Ee1YXi(|iO7S=7k7V-B8PUfyAx=>-hMYXH^**0Gf=Es3G4tqXM!6(2L^P?1e23wj~vhF zBtUBTYYqS#g(2{TCkDi^;35p96YiG3+C9e1V6aKcYVE4M_PE6-kn!cu?p6|yT#p+> zfxL-#Gaz~K`a5IW&7)O&ICKR?8$O+N=qFI! zm$j_@k%C}*h7T}CQ$dg@hnoP{`Hgb~fy)MAYpL6RXu1@n0{Gs7ell8UnQ&fi#t{0C zR%;Ns%8t~+#Y{Kle02>}Wd#)rdp=G6>rF4Hc znO@uO$Dk5f)5XYx7&-As`s18?S^Fce!=uhI5K)s(Rq%%q9}gd&f$y2S=$CpkdCEWV zeqs;^E+t+u0B^5T5S@i8Cm5>RSsse;$ePGh8V(Erq71B&D9TU@EVRHMKN+{22!N2? z)s+kQ5c4m{6*%Y8*967hcRyvqkz72HuZj{x|3MCol!|Rls$fE*O9`KK=r!TZoBF6$ z*J%p3dv*QR8SJm1JgD8PQbPFRWgXf7Cc5<+8p+q?1Z6$&;Ze?)JT}&Y4v66BRd03t zUc9zRGk_?#6_lNtI>%UDT#Bhz=1G7!=lp4kW3b)7Yr+F#Pa15A?3;*KRV1z@Q38m<}=_taG{PJ)W zZ2+}_02m7iuDdz-U)YH?^7$)JDU#?lmD&23i;ZVzkTA6}6AY$+)w>pmdU^>Y6?j=f zLq!ts5*xXofl7y|Y6$-m*)|{A`8@+gv7R>SlL;5Js(XudyP7iO!T${Nt0k!r~_rA_4MELWQ%S z$~iw9GGDaitT)BYL&mln^O3kDqjgtN8bMssHSxXMGsr#cE|eP1(i7Xe@szi6XqThH z@1&39l-D(a04A7a^~C!wPlL%8>g)+p~( zVqCrjBZZ^h&eV8PVfdS(h4qc=cqLA(5>FyQR)G-{GmXkr(fROV2ot|`$x2cPp?CYh z@VMJ|a@FM4hd}-g)&nboZ9_VRYH|x-yJ+Z_pNc}l04mjuV=^586nA*x5yMd$8}1y0 zMz5Nl+_UvUC}5zb9Z;pdJEAm4{1U!N_>Az~5djNLmOaNjwa2s&1KE_2ibTX&mQsFE zyBhC<#Z4U_7L=i0WcmU^wvR`T5-(506}$w3v1lQCxq-6+Y={4k3$%AnGVXWpolsAG zHuyjJc?gsk`KC*K%b^l(+=zg)pXF6yp{7u_$rkjar0uZw_guP@#Kz zfV?Ux7q}$o{$Tj1tK8&uB3!(@wz#e+f2oOLCBn)7%2Z&mZlD-`$2P`j=93*SDkV&{ zJ!TaiYK+bxJIqA2u|66$U5ZccEzZizG@nj{0WVx`TJFy#?+*ttrm!!f3x8{FF9n;^ zzWwPUu=kJL;4-`=PyvzV)~%mfQiK~9SksMLC}u2HgNNwIH3XGKXpUmb#D4~wa0th@ z3{oC69=;EElnZY7k_s#|$RNmFY7;E6C3V{2OCa25G}qf(LIYj+Q^~=g+J?jw-M1zU zU#AP|b{A)zsKz7<{1JIYt(o0S0 zN29Ph-lg%~n=LN_MAmDQ0BVDDeIsy?yG27!YwU*kdJ=>5^qJ6}Gr%C~&@F}ZCjPEJ zx>#RmnC&2ntbe*CW*yrhgRn!npB)BOd0MBXJv&js}Y`wlvYN(dk(0L-#=;D*$ zvUCiHFDo6gdAIbO* zzHtRVpLa!w`1?{9(Wm|W3)h!~5QT^sF_A&i@X~$^hjVpOU)n?nFup;PvszM;3E#hJ z*?D7Y&dXa*0|9*8+*n9qmp)xq+2NB1{X5R40G{FGdG_wP4UQ2#$4gP2t@^~$Sj##6NZHHeN2B`2}UHKgSv#xcrQ$pr2_k&(}DKawGu@qmH2CGLgf2_bZH)a{T0# zqerdJOPzE6#G3x&hsA6&95<-fX1;a1NPkU*i`-A+_eQc7M)0@wHGRJT-aSyjzMqB) zyOj|qqrQhY+EE4X#&c`#b%?!`oA|}K18Z(_*s`C+hWquQOA1R{3#NKSw`Q3xo z!`a!f?qs~?bGyhM_HQ5R%9_;sHG#lzIDfSll;LK&?=5i3W@~=a>=S;gYN9HStV4+A z(vXYeP~E@7J1e{ySHtp`s;%pL66I@3t@bCkbqb#4--nnL)6bQCvNrW;z*u+91Q@F? zlXCXVUdvWy{lPuFQei1*Y{^VO7H+rg;JyF$Xf{*e21=rk!l5OHRLJ9cK=XY&DIzdz zc*o+X9(UZZ76QiYMC)fuO*_EGBxtaD&pb?y>MD@T1?E%4V`chlE_m9F@FUI4HjKrCA%mv`>lEVJA!Rq zY3Q|=eG9^zmW;&mr2z06B9CPEci}xjvPFnMotY(RHLw7Tyzn*UQ2meb>JORd2OjFs zpJp0uUb?JZ9lnrDwWaZ@e2Ya)>;Yzi>o@Btr#Zi1HS4|Kn$`&n>oFfn5j+&?aZ}{C z#H5MgM^_2BK86A8V9B!}Z8RGq!Z)SA#j%UryoG%%xy7P8HB)tk;q>7H-o7h{* z<#L#Qv0II%SUhBZ0YP)9l*`SC z>LO78_pl$JgvmM zEu+5gpG0&&_4e(hMSa9DHb_2u8tP*<(SFIz}y32a!-``{wDighHWa9%{>|6n# z;1sn;ceky*L;IeO(hul*O({i(2b&GzfLW7skIPr@pOsUnP0ThKK4RZ$%psWKOBy}q z^?A6|==W*S+7lquQm5W>hG z0p>KK;8|~{Op7g3YRbuoLY}L{PjW_`&Akw}YE9Q`Ydm}|GoyJ5U>k>vHdCcY^^nE9 zc1PWQ)upZ|ainf|1W_<-t=EW#pS?(#a*jfa!#aipphj^$_`TE8^DHdnd0z4!^aeOX z(9vw!bmeE&xBG|TEFnh`Vr1lz(eZ&ZXD+v2MtH2cvGXS8mw&|lUatI-lT+k?lKl{| zW2Ej9OEsVw+9__ksnxMp`t~ttQe;&{M~CqB@0}!t8ZK=4tUQnz2h1W zz}^^>ZIy%7MS05v7^kD5q^N>7*1K?aTfbMJvwJJitws}N3ee`@o`9|FkkmC6MhgPu z3Btt|VcV8f%9O{;+J8?L1Vp{uZLV6`Ag1i{a=D4Qe5~0DNhajrCrptySL>0on)C&h zZo?~(oTYk;?QZ2+183NpFDcET+{qStg2njn-F;%pkhHLRe83%jwGOcn&$qA2A(bksg(z;qhAWs1Mp&BVbiq!l~hyF~+<N6K5g5^ zuzTCl0Z(tEA8UVLTEAX93@>P08-AP7QY$d5fjK4)i6u!N{UNM8b9ID6xzfR8vWf7O z9R^5*@spq>rzA&(_Dl5{yBW}PQA78LirE{G0#zJ2DS9EHn5uCleO7u@)VoaXI7ZFi zrU$&O0j7)yD|xl=2#WwGdDtFrj6mfR3aHPDf@iAI`(XGhd2xNtdO7v}K z9l-dd^c1P#>Si;u_9>=q3+M5-#M)}Qs*HFmTMZ(6KGKgd*q)Pd*Fr$Mry{-t207{r@;b7L>XeBAh#2tildB=0@#P*y5(p6d5EumCx;2eFbf38RO#$ z)jyMLj3U(c)e(UePzi;|0ritlO}l@kgn3ri(08>K0W3SDl5K<<3loJj z@mEs@ZeqI0-n{3%rXKmr%rkR0;=tc7G_7ZOg<4>b2`k&jz+5jlElAi;$C#xv=lE_& z^{l9;K4*m=1?~$r$F&0Y0c1vArCvj4hhB78S|K^@_LC5PUVcm&W99@?n+}?vJtjA( z5NJW%AG__P&kycSxyZ|q>uZ6Edv*T)0tRb&6qrc#)rarc4zeeXPIdUevy1smLKws9;>3lwa?!4bzyn2SdJzY*28lr0sxF^)AOpA?0`J`N` z*8&9;RM>M^mPq3zUu&VLe7HXz{Dg!Cgt6+#!pt$Jrz8ti1`$Axd9(ZVbg2#-1d>-$ zkkI6TLnVq_cNn&-1H=eR?e4@PhQv`(QQ99Y0F4R8U4m1a{_g(nTJx*K zZE4_JvdcGLdp=!x{b-mnTslzKaNo_;vG>GJZ3IK30#2G@eM;r2csB$r%(ZjZ0Txqn)O zTL!I-|5bL6CCH7%P0g(=TgV((WM^0y!rd28nU zv#McZuDS;?X2ucTW(UWDACz*N-@c5ZH`jTXqUN;B19594>rz)umV1tkItW%7^yucw z0_;y)ciQYIOJC;X7_9!>Y3tlryU&@F+D5Q|Km?+kQMpR^(OCWus9}8{3^Wy$4IaNM zPc_{^W@k&5l&|RYRHOs>E$h3JIX;*tJ4?VW?cpzQl0*`Uo0qx1bI|}M;E8k zYf?9`L!#JDhcz8_2!|KbmSS4mzXgbrv21K?o!ZvT%q%W=4FV20ueLolEKCHQysVgf-ocA#Pj)Pdko4ks_S`Vk(X-7Yq&Uul0T zd3f-`Goy1_{ecKaBaNOtq7fA(FP{a>P=qce3#dnL-84$4oc>P;= z0!NrdxVyiX{Oy~HiwoB4^F#jy`c$#3=fB#5f&vnR>2N$HA74bj^069w=!A{PJ-;30 zcUvpdE3lx%R`D%*i%?Q}sxT@Sycq$;gFoPy9AZNVOFd~hy9)n3rp7g56^ z;cZSFr#$`qqn=Jow?1zsL zoT0uwc%9GMu9?t=!#fZW2BxE}IGtp~(O7YeWGHYUK=I;RPvHBT0tHm)YLEL*tM`FT zRCN54Otl{tubzhog*;VGH#$yEs@B7lMLueJ z-;uHaJTy5}jS3?P_v+()INL92@1IE8kwYNBO_-x>IuB9>($qH z+3?u(=KecBI%%SuN?C}JoaN2}923(k4XrML2m@xq*uV6^>C$>^857Fs39aZbBe~r$ zg#{*oPi9-p=;J{k8c72>kDvu;Ag3^_VBPj_VuaZ0F(#;G>_3tRqaOiR-FTdR0 z?zUBeRK9GH&I-&Z=Ar?Ke?@(SukxB+m)&GQ=f4)&oV~_~1iWVC*)d-a%96TySCL*v zf)r05x8&HaB+ap9=e`z^9PMpfwa%MLMb5bQ76h;cJiUsv>Z^PLr7hlZT*3!GN(!o! zH)!&OU<8+rrPq0!39_~t!SzR=?`%bo8v_-kmp|~EmQz2!M*Q~d5Mzv%P*=w!4|v3U z*mz#|VCG(VAngbg^!YNpudD^)*-%BD-XoV6i zbjM3{*^=1}NrpestZhkhAI3mtb5%i%>wo2xxQ;W|&Y#-#gcH zm75JkYys(_NA(H>@wF3P>WSad2dk?O)}Gpm^_qCHqe)c+=Uyn16d~7}Iw4;9#U^Q{{s_Qg4a@V(LvWgYr3tPg7(kAlv z@dDWTthJs%)yZ5TgM$7aK`m=Lyb6NsA@cU5ETd%OxA>|M>aoqXZklo|=Usj~Y2%rJD4=S!mva*#^@b*YGWo^)cBbiafjRaOr(G^ukHd!Sk1{nxK8)V>e#R=o2<4kgblC z5~N>oMi@#OOGxkGKX2BkQVp$Xj>nOv#NkB5taz(73@2tl3DknGIi@9{SQL*!nOY*;n{E+;|m4;Fie zD%6&g5<%-=lLmK>Om$q?1ih0!C?PJ)pvCIJ=Qo<+Ars!MW@?#t72 zJLsS4bwA~L#O-Unju9@n_0g6IgH0Ay%!efqoCJ7)98HS1(3>to^X~XgB0KZ#@xIZx zlTc1`6V~)36s{2D2a7Q0gVvFeMr>3>a3dQZhjnViC>YP?*!{N|vXVF@&+@>4I@!3z zne7edojIm$o9mK2|0zAUwv5Y+R0O0d;fcvxz12@}17?P%`LQ-1S<6$&OcGEL(ohG* z?b6_Xo*XqAuO*Twywo8dkW|O9<3(P-=DKVpy`nS#4s>zm5DK!x)(9yX7`Q&)=2((V zkGOx*NCtvxdO*#%m-u6c;$**4RvqWmgL#&&Y?e!P>i8z#eG*+-{n9JfjajbWrs><9 z`)wOcM=^1alnWJbG;rRAR){&Tv9ZMKGC~uVdy83=tjP2u2n0yBfHu*HeM+}o+74Gc zAPgMQt$o5t9Zv}$l(G?1mi?C4DS)zrAa44ufs3I?}t(?e&|kItNS-86x(Km{6BuJ^w~oVy>ykeY!D zax|8Z8nu8h4Jg_M@YVCFsq^DhKYC^5j?ndm#U~t)H`>(b5pX?}FA2y{740hxZ@8$1|Puf*z zs90?O_oFloAQqr6&!9hZqoaTP*KE}85(851X{hOpB5?TZUq>MrfddNvzcIUfNSC_C zrN#(?NWFIye9_v5j07M69E^pC=H2C%W-)wMF6anMpo<)`9@P^PCW1yXcIL+;65wRd z+EU@|;kTH@9h1@2Br9&$(PE8k_y#X{SN`!WdBMTMXHuY4)(Xw}BHCMdr}`L`9d+7woWJPaxm|5nYrB z$Q>6?=meI>c1NhyaKZ+p(6b0DtiaLW?`9Sy$+^4s_(u4^l@c2I?Yq`rqe}fH)(i|K zrF1FDxfm_UT%5^IN2-o=Y;4fVv%h{T02=)GjB3vdKeES>xRP>u4*L}bpW9z_j3dZF z>lT1Pljh7*N$XJwp#GwBj@o4|D=f^~w;-1czb`8-jT?aB6ZYA6D%hn+p+h~$b^U9M z5Q3V24wSrS8!XX28w#UBRvA1KW`j9x=EPuvTQ+nD%rjK_%x2^i?$tm#39DyjSKD`U zi!JQ##{yP#ah{txqxYnPfT3{ud6E0vkMFG|K_70`5QiIIZpV0}cS zu%@B+ZMz<=_?|r!_~kJ%DkU5c&5POFQ?qsPN2u{r<%|IniD7N5NMp!>DJ&r^&4Nvj zQe5kVU+5IN)&H!at2NQWnjgDdrLLAJeX;RG5N`DHSZKGbJD#H2Ew9*+fQTJ_-G@wG zZ?lI-r%DFId?xp&(l}>=KYtWqZTLDeLc`zf>TPDn4xdmlj`Uw{`9p*ONyGlXcdLvn z)h0`|A}>4SH4UZ*0YeGoPzXrKG1@%=LO@o(xUMek{lyXul;)l*YEJ{q96b(->+i?_ z8hZNNbDLDTZs&jQ*e#LjaZsO}9Fi+kFDm4juBJCDw<+?Jnx=(`Cc9K$nu-6;6=A=6 zUtrA?ZXARmMI~r&59ziph5(6Vm94;!)q87B}qh-t?CI< zpxNaA=lF&KNTsD99Q=$rM?(SMhx9s6Ls;O#hZi&9{)h+j-Cu7(60QvixXgT9UQTT1 z9Tzqln%FvRF32q#J{+dQC>A5zsN6iwGJ|XQ6a)y^XtIDz%=qo4>Gn8n?D0ynZnZjy z0s~>&_70GS4el#wcfa($bxllcLx~w;pT5&K_ z`I)udIQLxP-vly{iZB&mo-Oi1YyE`dhkTx^(2SV)Cj87%vv?AB*6I5YP?qb7ZoW6q zpz%zbj7@bMSH0!3Z0&Gw%xS%Jrj@PdX9bq=@u4aNl-?HPyg6a}c;xa?WOlsFAkbY9 zpbCysV^H$<=W=KXX>Nwlsszq>bD(^kw;4LPNy*NREMl0O;~tP+*zqU=GgXU-9$Cvj z`UMc>=tiQlC@Nh_Rr?eG*w(Qw!+;|*`w2L7U}a@hIKN2uTmy7Q$|x}VTc6&O)~ zpSPx_<}B`K{i~fYWPCiRfS>R%!1TaT1)&iHC8}5gf|A(aV249)o)##KcqxPysqHal zv;_>?ZnUs|h&euPSF2NAlB$o5%C0f!L2@~w-(>B2z{l-qZ5|tB1)W7q-&E{qyd+Hz z_RqBp^=@Sefb+UZrVX^ovmpT5?{YhF_iApVele&y`}%CV5A?E?U7rFgUH z|F#o63KqK&!r{UKl88Q!07B*3X+O83AH)NJf!{j2<#dXl2}oSXIUw%7Ka;MIrF!Y~ z=$j0?GabKbQ)>0ZURGj_EaC!g`kTQ7-3d^*YgrKKWLayo;K7tHFzZk_E!nR*Kkwn} zTADQIw!Pku9cd-H_jwPF9(xG<8d0GaW@!^{{La5G;*paEmrR9w#L`Z?F4bj#Nbp^jdOT3rNX?I&SKz7fE$D1@M~t zjd#vF*vbnikaH&b);$eXS{!tyqy-}sqbLLeyoYW%UY@fIFZ+9y`vvbM+i^+_lgAy9E>MuTLxknH`j_g)RMDj{S?p(sMK zN7-2+E7>c_-dWFi_x%3*{f^)9eg1ep$I<7AxZn4Ezh2jMo!5C?*ZF$tqv&>gvWW4B z@y7i3NJ-md#BbYOy3fMGs;s=+xCGi3f7&%oukMHv)Q6O5Lh%9*bjj}A~1orGqYJDiiRx79IC~~0i$qUM>Al}GobxRLZBQ#Ujd zZPUb623cWYwuD{%7;>ysKTA!0 z^HxYrZEe|zJqc-UcP*l0-f~i^+eT#O>lJR!603RItgJm z9<6v8|G1Uar1Du~`@A!Hp|P)%nS;Y3AGPYT;KJFp-%T_fRqndE+iwpw3aB<{s=sDo z)f1d}PMGhRM`sA%gBJqAE-lu;mR^77)4sP!RUg}0lUqusO9$4XN$vZs(@W;&(s zl92s@W2|G-UTa*hq$w&4c$(kN2Pn8^#~)3SouuP)Bp#G-*E_S03bLzkPKz@@3ijs+r4Q?QEMu&Gn(#-EZDoFf%bl zE-Wzjy3ZflTwRHlv={4Td7rv>ZJAN>M*q4AlgntN6UoEP?FG&6)oIi}{dxN6&K2Fi zADe%=c5`T?|EjBK-E#G%5ZCzHnfY+FtI5i+HTl%8{lEPwA81Rgle4QHZpl@0@|-C* ztNkilsmC)vTb<@I=$}jGTdrZ(KyFz$NwvOtLRr}Xt+6u?r?>p)=1eUM#`QS!?N6zs z`5eEnG+WqLa<9#FAYN(xIRpgGQx7C)iz(b__I&MBG%SDdF7^gl7=xHCD_2HBdV263 zj`(xxj`P{^8=(b1u2u!n%c`jzcIsPX^;+4G`)NJovoNlHFZJy3m|>P>k066{KUdMr z7vG;=TWyG?)z3Z`uS|)l&MlPojy~=7!l1xtiCf0yTZa#HpdEVLq?VkqJ)(MRRwTD) zi907p!F@T7{lXplmnKKW+(timbc@?xv7$Kk8a2)|=LMlAeZlCJRW8d{IXO?^l9fF*7S|fj691y%eXf|ii;KW=kJI7Q#HuU4;!B-%P=8^p zX{zfFSLduU%9-2pbYxGs{=#i)<9O*7sxNMnlpn+CiD@Xaigqd@#0DGxZFpK>-~3sa?+|q`)C!<-6$ zI)D9UZ9}fc<5bhfj1teYvP`E+CT?u5_|oS8{cVE&-&ifN`IXNU=_6qgW46=9rAf|C zY+`Q1FImrqvc#9?bTstmmb%=Zb{`WmFif)DSmfi0L z{++YxD*N6XfyMQSai^N5rv55=E@mb^pU3so{0djdKL2i0XZ!i_p+&dT{8G0Zoq+2J zY_MiTE3V>|gQriAaA@DCnKSeO7^aR&ZvJhi|M`K#^DxycHzzi%G{ZyS?1BlSXV3qf z=41DP*#KNZM&rtreXeegZ7}3rr;wsuYFV_k(-MK^r?)x14_IK=d zV>(%NS~NA)^lh3M=?`@a{q8*vA3dT838h%fzFJO^%;)&WT9m<<|A3SFi8yIZk3*ah z#d6yyFF%Wm`%+$75a_v4a6?&H8tK7_!PTqfK3A=}!f6-*eRI3F-OEUGr`~z;Kv<#M zvbpC*jZ;mnLP}QFr}7;PvTnr(x1NUY!Ek#3sd!()!o)5d^?c`c=VW=|i0iENKXT%AKfR#5422w*eik8K!>_{MJA`l(LFu^^ zUS>_~QJ;=(^k~IRWW?7VclxM(=&-;J(v#Q0*`Rd&VM8=+cK$W%-aY=7rv}I@gF<&? zMDM3};$54RqMLlr*z7)hov$_$GqbfvymdDIP7V*hwrTX+lq~;sRKs;#(sQmg+PW}S zgWHZ{UP7z<)|P9SRG`G^V^2RyXzZlP-V@QiO%hMZBqkQQvBut6TKXWlN+r&H@Ejh0 zXnmw9V-9}vKeK(uP9iJe*11TL#d~X|RiA5qu8#5MP1_Hl&!lo&)pBh2=~wSR$#UVi zpH7SXPrGU5pYHRO&m%gJ=9HB&+`HdnX*|=f_2*}%1VhT&jQiTs>_zKy zyWt?3Wv<=2b*TCKf30gDbUog@d6V$^b;vbILCWdVBoS+4#2y;Z@ zmCLhIq=3Wq`>J`pJl6y=XKrB~_I~j4+KIW6;nAy2N|zJq1G^qmJ}7ppd;8vOI8&me zB7=2Bm>_PE*_0oe~fT z9;W6B690SbGMW6DbDVzz675r)R`M+*v=mxV3>OLub0BBzjX;O&cFASLrqr|vj9!N@ zN?314hmzsUsgVqX9>m5ZcBQC7H0$E=%wzq zhwxE6VKV;n`@C7io)09Ws396_c`UZIS_np;`()?g!L+s7bPTzA*7!BB!fW>&+S9wP z8Y&+*F_FOx((IRcMsBNKQ~MsBTe=4=#3d9{V)N}(Gj%@Sb);pyNR~JAC9`N_i3%Va zV8VHQR_IOo+v+hh{gHr%7ySD(Iw}#koTrNo(G`3-fty}v>NS{~>*wWl2RN4|&*{&P z_8^+Pd6zmg5;2zL(XAB_`06slgu2!Inp%nZq0c&g&!6x3T9>vuHe~g|W{7jg2g7;G zuXSeFp92?VP6tVB?pl*eRIy_{mTW!5dGzSr|K@jh6}|Oq*}j|Y=WWT$52B-@VC*KG z-QwL>Y;4%>U-V0o6KZMs@u*F2G=HquxHe=z9qA`awqyYR`o{)ezoxq2Avy~)$ajX_ zlengMCz^2+e4|ATcTn<+^e+ z9$3UrCc%R|t~WS)*3@O4(dv597-&aIGH+Jgl)nBxvYp!M_Y{1jK7Mq3(ICglFR;e? zGcR;BT;*$>>8gGC0hRYZNhRM;yjNfTU~I(}?^$pt8e{9!1Em>FW37u9u+H}&I%lE4 z6fJmI%J}%9y}Q{>y9#n%eEFie;=WBo@d6SBqtELOe|kMI%X+pwqx*hpDr@TH8_nDP zE>Aa3WN_*9ZQ9~f9<&-(4}8e{Z@^W2(|P~El5n-q;i-@&fm$}n{@L^StKoq%ii&<* z`*%J3EY$0)zggn3cGh2zjY0g1>bqLGdofzKYs6)rvAmVIxl zXoY=hb!xivqYHhelhWy4rz3?+6iKurHQ!!m-n8#!DA>#BYM`d9=MgWh{_nfhUzfjS zbqe}+)Mm~J|8P9sno=(EYFDc0}xN2aGEj-?D+HQeg z($|9;kW#4E{-jyEdD5KDIf?ZF2m6V*1_dE;$!LjhQkqWka$$Psgbi!P1x{mo^S-?-gM&8fSq$fvavh)dN!Km^;;B&L zkJq>QYH&ylnhA*w1zUtYg^x1q;r<55+W%4@D9$xA2c_RiOr_Kn0k(dcL2#TaZt zQk(C>W_Zkdke4xwl4~VQw>!QwF;<1pWm?|*@#E17m5ax4%6sN>bP?63V2H@2E~1d~^R-6gYq)PNP^ZmsUoaM|(cknV&2I@7Pa%E>~hK3byQN zf%%TH&My#mAUU^R>Linxzm>Mw_KXgXn`|DspPx3y>FfRawz)8V>moDNrJ4g4|1LUM z@v+6y39=H3rf2d(vp(qWv?&xzDO4n`a!UA>aF>a?l1NKrjF8H|q5~J>_~8GbhVuVg zn)p8}$NXQp)C)zYZA3{$9^@rDi(GcbH&s6o>b+)a`kNR&EQsm$Y zH*emAkKNbIKe;bLitKY^>;<&~d#D)Z3=a=m_qvP)$H#kpeX2_KIaN8Wv&e-nLfcdL z$dM!3YMOE-bpM`rM`xDdK8cNSrP)>Y;n7jsHf7c0c5Y}zDPHcaOV=!1nfBTWOie}J z_iq-G?N)NXy-2CG+GtaJ6NT5x6$}qQOicwnA?|*DYkf@Oh@g2Vn{Y40i0qogs?#z` zWHDNtZPf5rc0zq_6&pSHTFETgNu&%E*wLi@8_RuTm@=-^%Ott3rPWx?=p`>DwG-pC z!~i= zH{Meyw2y{E2QUt!o_zXMYN!otGP$XtEwy!E}JBGF`}ctsS^AO|1V*333>k4sJbn3sx z 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