From b881488948602d17acfba05e21cec5f67193413e Mon Sep 17 00:00:00 2001 From: Niel Markwick Date: Wed, 16 Nov 2022 14:57:27 +0100 Subject: [PATCH 01/11] Create codeql.yml --- .github/workflows/codeql.yml | 74 ++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 .github/workflows/codeql.yml diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 0000000..3c90e26 --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,74 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + push: + branches: [ "main" ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ "main" ] + schedule: + - cron: '27 22 * * 5' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'javascript' ] + # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] + # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + + # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality + + + # Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v2 + + # ℹī¸ Command-line programs to run using the OS shell. + # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun + + # If the Autobuild fails above, remove it and uncomment the following three lines. + # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. + + # - run: | + # echo "Run, Build Application using script" + # ./location_of_script_within_repo/buildscript.sh + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 + with: + category: "/language:${{matrix.language}}" From a874ddf4332d621ef6719f128f184176c2d43862 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Nov 2022 13:58:11 +0000 Subject: [PATCH 02/11] Bump minimatch from 3.0.4 to 3.1.2 in /cloudrun-malware-scanner Bumps [minimatch](https://github.com/isaacs/minimatch) from 3.0.4 to 3.1.2. - [Release notes](https://github.com/isaacs/minimatch/releases) - [Commits](https://github.com/isaacs/minimatch/compare/v3.0.4...v3.1.2) --- updated-dependencies: - dependency-name: minimatch dependency-type: indirect ... Signed-off-by: dependabot[bot] --- cloudrun-malware-scanner/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/cloudrun-malware-scanner/package-lock.json b/cloudrun-malware-scanner/package-lock.json index 5c04521..a71acb2 100644 --- a/cloudrun-malware-scanner/package-lock.json +++ b/cloudrun-malware-scanner/package-lock.json @@ -1984,9 +1984,9 @@ } }, "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.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "devOptional": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -4498,9 +4498,9 @@ } }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "devOptional": true, "requires": { "brace-expansion": "^1.1.7" From 6cb646a09677978ca92348ce7f3d1b1a676bfdf4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Nov 2022 13:58:09 +0000 Subject: [PATCH 03/11] Bump node-fetch from 3.2.0 to 3.2.10 in /cloudrun-malware-scanner Bumps [node-fetch](https://github.com/node-fetch/node-fetch) from 3.2.0 to 3.2.10. - [Release notes](https://github.com/node-fetch/node-fetch/releases) - [Commits](https://github.com/node-fetch/node-fetch/compare/v3.2.0...v3.2.10) --- updated-dependencies: - dependency-name: node-fetch dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- cloudrun-malware-scanner/package-lock.json | 14 +++++++------- cloudrun-malware-scanner/package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cloudrun-malware-scanner/package-lock.json b/cloudrun-malware-scanner/package-lock.json index a71acb2..6d70ad3 100644 --- a/cloudrun-malware-scanner/package-lock.json +++ b/cloudrun-malware-scanner/package-lock.json @@ -19,7 +19,7 @@ "clamdjs": "^1.0.2", "express": "^4.17.3", "google-auth-library": "^7.14.0", - "node-fetch": "^3.2.0", + "node-fetch": "^3.2.10", "process": "^0.11.10" }, "devDependencies": { @@ -2117,9 +2117,9 @@ } }, "node_modules/node-fetch": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.0.tgz", - "integrity": "sha512-8xeimMwMItMw8hRrOl3C9/xzU49HV/yE6ORew/l+dxWimO5A4Ra8ld2rerlJvc/O7et5Z1zrWsPX43v1QBjCxw==", + "version": "3.2.10", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.10.tgz", + "integrity": "sha512-MhuzNwdURnZ1Cp4XTazr69K0BTizsBroX7Zx3UgDSVcZYKF/6p0CBe4EUb/hLqmzVhl0UpYfgRljQ4yxE+iCxA==", "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -4596,9 +4596,9 @@ "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" }, "node-fetch": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.0.tgz", - "integrity": "sha512-8xeimMwMItMw8hRrOl3C9/xzU49HV/yE6ORew/l+dxWimO5A4Ra8ld2rerlJvc/O7et5Z1zrWsPX43v1QBjCxw==", + "version": "3.2.10", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.10.tgz", + "integrity": "sha512-MhuzNwdURnZ1Cp4XTazr69K0BTizsBroX7Zx3UgDSVcZYKF/6p0CBe4EUb/hLqmzVhl0UpYfgRljQ4yxE+iCxA==", "requires": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", diff --git a/cloudrun-malware-scanner/package.json b/cloudrun-malware-scanner/package.json index d8bf949..c083f61 100644 --- a/cloudrun-malware-scanner/package.json +++ b/cloudrun-malware-scanner/package.json @@ -22,7 +22,7 @@ "clamdjs": "^1.0.2", "express": "^4.17.3", "google-auth-library": "^7.14.0", - "node-fetch": "^3.2.0", + "node-fetch": "^3.2.10", "process": "^0.11.10" }, "devDependencies": { From 6dc10bb4abfaf8acf882b40a2d41aa8a53440725 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Nov 2022 13:58:07 +0000 Subject: [PATCH 04/11] Bump moment from 2.29.2 to 2.29.4 in /cloudrun-malware-scanner Bumps [moment](https://github.com/moment/moment) from 2.29.2 to 2.29.4. - [Release notes](https://github.com/moment/moment/releases) - [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md) - [Commits](https://github.com/moment/moment/compare/2.29.2...2.29.4) --- updated-dependencies: - dependency-name: moment dependency-type: indirect ... Signed-off-by: dependabot[bot] --- cloudrun-malware-scanner/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/cloudrun-malware-scanner/package-lock.json b/cloudrun-malware-scanner/package-lock.json index 6d70ad3..a1103a5 100644 --- a/cloudrun-malware-scanner/package-lock.json +++ b/cloudrun-malware-scanner/package-lock.json @@ -2014,9 +2014,9 @@ } }, "node_modules/moment": { - "version": "2.29.2", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz", - "integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==", + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", "optional": true, "engines": { "node": "*" @@ -4522,9 +4522,9 @@ } }, "moment": { - "version": "2.29.2", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz", - "integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==", + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", "optional": true }, "ms": { From b048121579a47d7924eba7c94ce1233116f12970 Mon Sep 17 00:00:00 2001 From: Niel Markwick Date: Mon, 5 Dec 2022 20:58:23 +0100 Subject: [PATCH 05/11] Updates to include a mirror of the ClamAV CVD database (#37) Updates to include a mirror of the ClamAV CVD database This requires that config.json is used to specify the configuration, that a separate bucket is used to store a mirror of the CVD database and that this bucket is pre-populated before deployment * Add metrics for CVD Updates * Fix bytesScanned metric * Use standard cloud logging library * Make startup logging more robust * Update npm versions --- .gitignore | 7 +- README.md | 215 +- architecture.svg | 2767 ++++++++++++++ cloudrun-malware-scanner/.dockerignore | 7 + cloudrun-malware-scanner/.gcloudignore | 5 + cloudrun-malware-scanner/Dockerfile | 90 +- cloudrun-malware-scanner/bootstrap.sh | 134 +- .../bunyanStdoutJsonLog.js | 104 - .../{config.json => config.json.tmpl} | 9 +- cloudrun-malware-scanner/logger.js | 21 +- cloudrun-malware-scanner/metrics.js | 49 +- cloudrun-malware-scanner/package-lock.json | 3229 ++++++++++++----- cloudrun-malware-scanner/package.json | 18 +- cloudrun-malware-scanner/server.js | 238 +- cloudrun-malware-scanner/updateCvdMirror.sh | 93 + 15 files changed, 5751 insertions(+), 1235 deletions(-) create mode 100644 architecture.svg create mode 100644 cloudrun-malware-scanner/.dockerignore create mode 100644 cloudrun-malware-scanner/.gcloudignore delete mode 100644 cloudrun-malware-scanner/bunyanStdoutJsonLog.js rename cloudrun-malware-scanner/{config.json => config.json.tmpl} (62%) create mode 100755 cloudrun-malware-scanner/updateCvdMirror.sh diff --git a/.gitignore b/.gitignore index cc850fb..d73d90b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ node_modules .DS_Store .bin -unscanned_files -run.sh -.idea \ No newline at end of file +.idea +cvds +pyenv +config.json diff --git a/README.md b/README.md index e9e46ee..4fa5fde 100755 --- a/README.md +++ b/README.md @@ -2,10 +2,12 @@ This repository contains the code to build a pipeline that scans objects uploaded to GCS for malware, moving the documents to a clean or quarantined -bucket depending on the malware scan status. +bucket depending on the malware scan status. It illustrates how to use Cloud Run and Eventarc to build such a pipeline. +![Architecture diagram](architecture.svg) + ## How to use this example Use the @@ -20,16 +22,215 @@ Run and Eventarc. * 2021-10-14 Use Cloud Run and EventArc instead of Cloud Functions/App Engine * 2021-10-22 Improve resiliency, Use streaming reads (no temp disk required), improve logging, and handles files in subdirectories -* 2021-11-08 Add support for scanning multiple buckets, improve error +* 2021-11-08 v1.2.0 Add support for scanning multiple buckets, improve error handling to prevent infinite retries -* 2021-11-22 Remove requirement for Project Viewer permissions. -* 2022-02-22 Fix node-forge vulnerability. -* 2022-03-01 Support larger file sizes (up to 500MiB) -* 2022-06-07 Fix issue where clamav cannot update itself on container start +* 2021-11-22 v1.3.0 Remove requirement for Project Viewer permissions. +* 2022-02-22 v1.5.0 Fix node-forge vulnerability. +* 2022-03-01 v1.6.0 Support larger file sizes (up to 500MiB) (#24) +* 2022-06-07 v1.7.0 Fix issue #32 where clamav cannot update itself on container start +* 2022-11-25 v2.0.0 Resolve #35 where ClamAV update servers blacklist cloud run IPs. + adds a local cache of ClamAV definition files which is updated on a schedule. + +## Upgrading from v1.x to v2.x + +Version 2 has a different way of handling ClamAV updates to avoid issues with the ClamAV content distribution network. + +### Background + +ClamAV requires an up to date virus definition database to function, but Cloud Run containers are stateless. Therefore in V1.x, on container startup, the freshclam daemon downloads the entire virus definition database from ClamAV's CDN. + +ClamAV updated their CDN to rate limit the downloads by IP address to prevent excessive use, and as Cloud Run uses a common IP address pool for all egress connections, v1.x frequently triggered this rate limiting, which then prevented the download and update of the ClamAV database definitions, and prevented container startup. + +V2.x resolves this issue by maintaining a mirror of the malware database definitions in Cloud Storage, which is regularly updated using [cvdupdate](https://github.com/Cisco-Talos/cvdupdate) to download only the difference files. ClamAV's update service, freshclam, then only downloads from this mirror avoiding issues with the ClamAV CDN + +### Differences between v1.x and v2.x + +v2.x uses the `config.json` file for passing the bucket configuration - previously this was only required if multiple unscanned buckets are configured + +v2.x requires the following additional services + +* An additional Cloud Storage bucket for the ClamAV database mirror +* A Cloud Scheduler job to trigger updating of the Cloud Storage mirror. This causes the containter to run the [updateCvdMirror.sh](cloudrun-malware-scanner/updateCvdMirror.sh). + +### Upgrade instructions + +Assuming that you already have a v1.7.0 service installed, perform the following steps in Cloud Shell to update it to v2.0: + +1. Enable the [Cloud Scheduler API](https://console.cloud.google.com/flows/enableapi?apiid=cloudscheduler.googleapis.com) on your project. + +1. Clone, or fetch and checkout the the head of the github repository to get the 2.0 source files + +1. Change to the `cloudrun-malware-scanner` directory: + + ```shell + cd docker-clamav-malware-scanner/cloudrun-malware-scanner + ``` + +1. Set up the following shell variables for your project, replacing `MY_PROJECT_ID` with your project ID, and configure gcloud. + + ```shell + REGION=us-central1 + LOCATION=us + PROJECT_ID=MY_PROJECT_ID + SERVICE_NAME=malware-scanner + SERVICE_ACCOUNT="${SERVICE_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" + gcloud config set project "${PROJECT_ID}" + ``` + +1. Create a Cloud Storage bucket for your ClamAV database mirror, and grant the service account access to this bucket + + ```shell + gsutil mb -l "${LOCATION}" "gs://cvd-mirror-${PROJECT_ID}" + gsutil iam ch \ + "serviceAccount:${SERVICE_ACCOUNT}:objectAdmin" \ + "gs://cvd-mirror-${PROJECT_ID}" + ``` + +1. If you do not have a `config.json` file, create one from the template, edit it and confirm the names of your buckets: + + ```shell + sed "s/-bucket-name/-${PROJECT_ID}/" config.json.tmpl > config.json + nano config.json + ``` + +1. Perform an initial population of the ClamAV malware database mirror in + cloud storage: + + ```shell + python3 -m venv pyenv + . pyenv/bin/activate + pip3 install crcmod cvdupdate + ./updateCvdMirror.sh "cvd-mirror-${PROJECT_ID}" + deactivate + ``` + + You can check the contents of the mirror with the command: + + ```shell + gsutil ls "gs://cvd-mirror-${PROJECT_ID}/cvds" + ``` + + It should contain several `.cvd` files, containing the full malware database, several `.cdiff` files containing the daily differential updates, and some `.json` files with configuration and state information. + +1. Build and deploy the updated service: + + ```shell + export SERVICE_NAME=malware-scanner + gcloud beta run deploy "${SERVICE_NAME}" \ + --source . \ + --region "${REGION}" \ + --no-allow-unauthenticated \ + --memory 4Gi \ + --cpu 1 \ + --concurrency 20 \ + --min-instances 1 \ + --max-instances 5 \ + --no-cpu-throttling \ + --cpu-boost \ + --service-account="${SERVICE_ACCOUNT}" + ``` + + The build and deployment takes about 10 minutes. Once complete, you will see a message: + + ``` + Service [malware-scanner] revision [malware-scanner-NNNNN-XXX] has been deployed and is serving 100 percent of traffic. + Service URL: https://malware-scanner-XXXXXXXX-XX.a.run.app + ``` + + Store the `Service URL` value from the output of the deployment command in a shell variable. + + ``` + SERVICE_URL="https://malware-scanner-XXXXXXXX-XX.a.run.app" + ``` + +1. Create a Cloud Scheduler job that executes an HTTP POST request on the Cloud Run service with + a command to update the mirror of the malware definitions database. + To avoid having too many clients use the same time slot, + [ClamAV](https://docs.clamav.net/manual/Usage/Configuration.html#freshclamconf) + requires that you schedule the job at a random minute between 3 and 57, avoiding multiples of 10. + + ```shell + while : ; do + # set MINUTE to a random number between 3 and 57 + MINUTE="$((RANDOM%55 + 3))" + # exit loop if MINUTE is not a multiple of 10 + [[ $((MINUTE % 10)) != 0 ]] && break + done + + gcloud scheduler jobs create http \ + "${SERVICE_NAME}-mirror-update" \ + --location="${REGION}" \ + --schedule="${MINUTE} */2 * * *" \ + --oidc-service-account-email="${SERVICE_ACCOUNT}" \ + --uri="${SERVICE_URL}" \ + --http-method=post \ + --message-body='{"kind":"schedule#cvd_update"}' \ + --headers="Content-Type=application/json" + ``` + + The `--schedule` command line argument defines when the job will run + [using the unix-cron string format](/scheduler/docs/configuring/cron-job-schedules){: track-type="solution" track-name="internalLink" track-metadata-position="body" }. + The value given indicates that it should run at the specific randomly-generated + minute every 2 hours. + + This job will only update the ClamAV *mirror* in {{storage_name_short}}. The + [ClamAV freshclam daemon](https://docs.clamav.net/manual/Usage/SignatureManagement.html#freshclam){: target="external" track-type="solution" track-name="externalLink" track-metadata-position="body" } + in each instance of the {{cloud_run_name_short}} will check the mirror every + thirty minutes for new definitions, and update the ClamAV daemon. + You can force this job to run at any time using the command: + + ```shell + gcloud scheduler jobs run malware-scanner-update --location="${REGION}" + ``` + + The results of this command will only be shown in the detailed logs. + +### Viewing detailed logs + +1. In the Cloud Console, go to the [Logs Explorer](https://console.cloud.google.com/logs/query) + page. + +1. If the **Log fields** filter is not displayed, click the **Log Fields** + button. + +1. In the **Log Fields** filter, click **Cloud Run Revision** + +1. In the **Service Name** section of the **Log Fields** filter, click + **malware-scanner** + + +You can see the malware definitions mirror update checkss from the following log lines: + +``` +Starting CVD Mirror update +CVD Mirror update check complete. output: ... +``` + +If the mirror was updated, there will be an additional line: + +``` +CVD Mirror updated: DATETIME daily.cld updated (version: MMMMM ... +``` + +Freshclam daemon update logs will appear every 30 mins and will show as: + +``` +Received signal: wake up +ClamAV update process started at Mon Nov 14 14:29:51 2022 +daily.cvd database is up-to-date (version: NNNNN ... +main.cvd database is up-to-date (version: NNNNN ... +bytecode.cvd database is up-to-date (version: NNNNN ... +``` + +If the database was updated, the log lines will instead show as: + +``` +DATETIME -> daily.cld updated (version: MMMMM ... +``` ## License -Copyright 2021 Google LLC +Copyright 2022 Google LLC 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 diff --git a/architecture.svg b/architecture.svg new file mode 100644 index 0000000..248cfcf --- /dev/null +++ b/architecture.svg @@ -0,0 +1,2767 @@ + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + +eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nOy92VJbW7MlfH+eYseu21x1MDAwZtXsm7pcdTAwMDNswGAwpjP4j1xuQoDo+1x1MDAxZU6cd68xpmi0ppDWXHUwMDE0jbe8f7vqfNtcdTAwMDaRrCZntiNH/vd//fXX35d3p62//89ff7duN5uHe1vnzZu//8OvX7fOL/ZOjvEtlf59cXJ1vpk+uXt5eXrxf/73/945Odk5bG1cdTAwMWWeXFxtbe62mpdcdTAwMTe7rdZl42bvcrf9ncbmyVFbVuuwddQ6vrzAT/9/+Pdff/13+t+O337e2rxsXHUwMDFl44fSXHUwMDBmpG89X4B2Pv/q3Mlxulx1MDAxOFx1MDAxN5z0zkv79IG9i0/4dZetLXx3u3l40Xr+XHUwMDBlv/T36vLI9v7Y0snuqLj5sT3zbfrwU/j+/Fu391x1MDAwZVx1MDAwZlx1MDAxNy/vXHUwMDBl01VdnOCJPH/v4vL85KD1Y2/rcvfxsXR8vddPnZ9cXO3sXHUwMDFlty549+Lpqyenzc29yzt8TYrnr7ZcdTAwMWZB5+du8S/vnv/Nn1BcdTAwMWT/bv/u8ZPDk3P+7v+lhJLKPP/2jebmwVx1MDAwZS7heOv5M9tyW293fObm4Y5ijI3Y8ef5XHUwMDBld1t7O7uX+IhcdTAwMTWh4b2MKlx1MDAwNmWsk+b5QlrpkUtplMGP+udcdTAwMWbmrz/9spXe/v/NXHUwMDFm2m7z/PTh4fx9wX90XFw6r/pzh+o8//DV6Vaz/Yqlc1FDXHUwMDBiXHUwMDAyfuPzrzzcOz7AN4+vXHUwMDBlXHUwMDBm05f+5z+vUDvT8WJytfN8zEqXq93MytzI5cjS/OTOSKtcdTAwMTknm0tf5k4vX6N28p3UTtVqnfdccmt0sNGZKJXWVVx1MDAxZMy+6+xbVPLyvHl8cdo8x5t+QS2daeBXqCC8kN6abq00XjdcXDBKXG6rnJbWdKmlNT5cdTAwMWFo5vsr5cM3npWr46Xv3k5tyJPvm1eTXHUwMDFiy013PfPzx/7W/ZOsiiY2z89Pbv5++s7/PPytn8p7XHUwMDFjQfG+Klx1MDAxZntqvJR4xSZo64tV/qu6W1xc3ppftWH2cvpg5Ej+/PF1dbgtrez8yF2yd28ztVx1MDAxM1x1MDAxM1x1MDAxM91cbi2979ZhXHUwMDFmukyp5uGi3lx1MDAwZa616TJeqbVubbUl79WtW1x1MDAxNHej4/M/blavrlx1MDAwYrX2P/3kfj/evbbnXHUwMDA3d9vHs1x1MDAxYqdL2/dcdTAwMWKjo27+XHUwMDFk5C5ebU7Mj31ZXHUwMDFiPzX30621idXdn/c/3kGutVPLI3N+KZytXFyPnlx1MDAxY+1ur227n+8gd37BLs80766Wbiav7LRf/nF/9nX6XHUwMDFk5P6QM7tj15OLXHUwMDE3+3799tPZ1c6Mnr94XHUwMDA3uZs751x1MDAxNyeLkztjczOH3+789W0w81PvIHdp4X5kKsbDb9/Op65Xxpfmf/w8PHxcdTAwMDe5n88u95fCptxcdTAwMTfuev3o+uCkXHUwMDE19ew7yF2ZWF9d/Tyqr9ZXb1x1MDAwZm9GWl+tnd18N2suozDPZqHUml+2bi9fMuRShvyrT5bcXHUwMDA2XHUwMDE1TFDx2aHXWfKTy7m19fuFjZ+z6+tcdTAwMTfXX89cdTAwMTfs6Z7qYcl3m5u7V+etYbDlWdhslWz0jlJE+vP6KEXK58jsyahL12XUvYBcdTAwMWZ15vn1dNr0J435+9N3cb1wuTElly9O783MqVx1MDAxZG/+XHUwMDE0f3fp0fCY/lx1MDAxMlx1MDAxNTeiI0zsUPFnTTo5vlxc3LtPamoqX51oXHUwMDFl7Vx1MDAxZN5VXHUwMDE0KOk+rmS2eXiDl/LX4mbz+Lh13vlcbi9a+C1Jmq782Ojh3lx1MDAwZY/J34et7er5udxDXHUwMDFh/PTty5OO0G9cdTAwMTOX0YS48y9b+XWfnO/t7Fx1MDAxZDdcdTAwMGaXelxc0ivPsO51hrWJSkfVoXJ1R/hQblxcxbv91dXTs7ORbyN25Vx1MDAxML7t9zvCRn3gXHUwMDExtvGFXHUwMDEz3JVKKKQhXHUwMDFlqZ/6547w+1x1MDAxZDJVesjGWeb5a+Hq+OXjJX7p8Xq+mL5cdTAwMDcrXdxcdTAwMGJcdTAwMDfLm57nykctvVx1MDAwZeXnaklsbtqT0SD2Zs5vLk+Cjvd7e/9kXl9yqpRvxMA/3lxiq6OrnjFlXHUwMDFiWlx1MDAwYmut895IXHUwMDFke523XHUwMDE3z9JLSVCztbmx3XzBZYaGXGb4RU5Fr4VSxr1w/pDZO6RARitlg1x1MDAxM11cdTAwMGVcdTAwMTWBjIsqvHxcdTAwMTg/rNxUf8pcdTAwMGWbXHUwMDE3l+MnR0d7l/jJ+ZO948v8XHUwMDEzXHUwMDE3l83zy1G60d1Ws0vnW8dbPb93SnFVa/P8t7+eX3f6x9Pf/+9/Xvy0aVgjlFx1MDAwZkZcdTAwMWJvtXlcdTAwMGVcdTAwMWP5p+vx10nr/U5fJW6wW+n16f/q/O/7WVx1MDAwYlx1MDAxYrSXeHjlgXTz2+3BhFx1MDAxZVnbXrKzV2HmxuyZk8Vht1x1MDAxNsY1JF+aXHUwMDE1XHUwMDFhWtKRWCRr8Vx1MDAwZfbBqGBfqkdcdTAwMGZiXHUwMDFmXHUwMDFlLs7H51x1MDAxY+rRX+NcdTAwMWVjkNI///RcdTAwMWZcdTAwMTMx2LlcdTAwMWHhU6aR8MEpa0JQYcCfL7Jcbs/v8Lc2XHUwMDBiNFx03jpjy+2C2tpqfl/cat2OXnxutsL4vtzbfFVT6pdGXHUwMDExoiGg7M5cdTAwMTmJcLijXHUwMDE3kuyCVZWXXHUwMDFhslx1MDAwYns/K4FYxiv80SpIuJSO61x1MDAxOMBI4J0hMY8h/jFcdTAwMTJ/Pf1cdTAwMTk4jrB8XHUwMDEzUVxiXHUwMDFkXHUwMDA17ETnT4+ohvJWXGKJ6DL4wO/Xyev5XpO8wW2GbkBPcVx0iO6Ng2jn3ihwqI1cdTAwMTDOo5PWPzvnOlx1MDAxM/Rpw329a+3N+quD3S/rI1x1MDAwYnJufO709zZBvyyRXHUwMDE5wFx1MDAwNPXMY5SQxnqj3Fx1MDAwN/Qo/39igfqf8IFzj75cdTAwMDZoYGl9zSOto4kxXHUwMDA2XHUwMDBimSFAc4fI+PTtXHUwMDE4d0TVmVx1MDAwNVLCXHUwMDA0aWUnMqDOXHUwMDA2WXu9MHP9bXRxfX1zY2x7+3LxYOZ6uDvGIWtcdTAwMTjrjpb8L29cdTAwMThcdTAwMGKplLOdRdNf0jDe+Pr57NPWjyU1Pfe5tXe/t7sqV96jUbrud0bWfs5cdTAwMWYov+9WJ65Wps5mN9+x4dbL8PU9XGa9i/W210Ewjr5JxfKi4pSeXGZif7t1enSnzsT+57H5s+3zXHUwMDFl52BoivUhq9VrXHUwMDA3q/ar+22260wgXHUwMDBlXHUwMDEy0Vx1MDAxYflyYP+kMX9fLOyPXq/s+7P7jXBo5+Pe591NNWTVel35ap9q/fLxReo8bf01drV50KqENc9Fe1n5uY8u2ndd06vOme9cdFx1MDAwNYXZs07HYMr9zdWiXHUwMDFmP7n4eTQxMnKkv4rJ65PDT/O/3TlcdTAwMGKy4T/unPmipphBzOJ8J2Ly9z1lXHUwMDAz9sRcdTAwMTYvT86bO62Xj9g/0Vx1MDAxN3u8oDdcdTAwMDR1PVx1MDAxYs9QTzzOIFQ5XGZQXV3PfWu1vlxchb1Ph3tyemw6bi9ccndiXHUwMDE5JGL/lFd645A4VvNK7TzySv4xUSlcdTAwMWZFz8P35sRSxUb7MqJcdTAwMGXIQ4x6XHUwMDAxki1FQ4mAq4kuSuk6QVx1MDAwMY/gVy9DlL1cdTAwMGXnr88sP0QxYflj9FaUVzxOd8a1XHUwMDFjm949XVx1MDAxZt0+vtvdWzua+tZcdTAwMGJcdTAwMTIxLIppTFUhPlox8Sq3tt1cdTAwMGKKWT1cdTAwMWadVYtcdTAwMDFcdTAwMTSTNY9okUJcckv3tq9m9izC9VZKpX10Mury0P9mYvwgzC9urVxcTv48m/h8+8XP/lx1MDAxNMOulL6R3rNcct5VoG2DKeVDqFJcdTAwMTOs9OxcdTAwMDM8qGSJqTTG2Gi17u5cdTAwMTUm71x1MDAwNn2uXHRj7O3q1t25/bF4dH4wen67unS76JeLwpg/pbr0Z6Tn23qHXHUwMDFm73rNdeKGppjW25L4IHCrYoCeolx1MDAxOb278Yvr/ovaOv8+sjtcdTAwMWK2x462h9yS/Oq462Pdm4vG4cSqf3Pc5byOXlxuW+7h7uZcdTAwMGYn5sbOt9cvRpaknTvZXHUwMDFkkzeTQ66XSnem2ElcdTAwMTk9su7O1/9mXdze3u5WxND5e59Vr2Esf7X2WrjonVZdqoeAn99cdTAwMWKWdvaH2EShXFyQUbnykH/y9OLY2/mtm6Nccj0xK3e/mYmlXoXVYdE97Vx1MDAxYaFL+USf0urbNM409EsqV/3yY2IpnJRRvEbLPqSc8yFa5rzQOlxiW65l55thY27p58L40fFXf3HQOt5cXPnZXHUwMDFjci3r73mDeLA472XsPrbgwTHOiLfmfou88tWKKU1cYjKocsU8mlx1MDAxZj0xk+F6xs7NbH6b/+6+Tlx1MDAxZOxcdTAwMGa5YvaveLy7Yn5sROhcdTAwMWRcdTAwMDfpf4+AcPByh7HQxlx1MDAxMEV5bfhg/ez8/ltYWFx1MDAxNpPufmrF7/w4PXTDrpB9q1x1MDAxZKVcbvnrilx1MDAxZP3Kb0ZZ38nz8XK1w+8tnK/a60+LbsJf7t1s+73xSfun2vH8j6e//5PVjuf3XFwnb/jLXHUwMDFkOkRlhFx1MDAxZqCYvz6iRlx1MDAxN2dcdTAwMGWv5md+nLifcjksxY27Ibckvzjm+uBih1x1MDAxMVLoMDTwxY9QS89cdTAwMWGc96HcwW2p71x1MDAxN7dH8egsTlx1MDAxZJ+fjc59WWutnVxyuVq+UOxcYqaR6lxyw1nswPdDlP73XGKrXlx1MDAxYu0rXHUwMDFmfTS4zWLdu737NrI7vTM7XHUwMDE5XHUwMDE2l7e/j31rre2PXGb5sNmLxY6gq7WHf6raoYREzCd6cTf8TuWO0JPnSUucNVJ6XHUwMDE1q9n3sfHro7GTtZ3V8V2xJ6abrfWJr8NcctrlhFZVx/5J1K6WKkZp9Mth+Iehdk9uRvemzZLdnJ3c+3nUvFxm93KikH7nMfR7d6Xtia7tTcUnpbeKk4XlXHUwMDFhO7I0N7b+Y3XDf27OjI6uLdxuXHUwMDFmf9lcdTAwMWR22J90OdLc/XrcX5dN9FxuSX9Pk/ikMX9fL4xOrixcdTAwMWNu/DzZOL5cdTAwMWE9vduYOP/ZXHUwMDFjMtxfMbp2/LDVPFx1MDAxZVwiZG3lel51vkLsdbxcXFxi1irRoWi1p+v68uDLzOL+z5WJde0nv62fzdz2QrBcZvHpXG5cdTAwMWaKXi9D1UpcdTAwMTGUYovrnzte/TzIgVx1MDAxOblZNNdcdTAwMTNL8mLp58LYyHQ4X9n6eFx1MDAwZvLi4f1cdTAwMDPa7Y2MN1x1MDAxMcmDUlx1MDAwMzRcbpw81ov729NqdWKxaU9X7N3J5M1wp1x1MDAwZdLaf1x1MDAxNWhcdTAwMTeZLu7I/1x1MDAxYlpYPVx1MDAxNVNcdGOI/lx1MDAxY4DH7GjOjy9ffL3d2Fx1MDAxOd3bnDpp/Zj5ujnkoF1kjf8q1K7DT4fwW1x1MDAxNFt69rB6T1x1MDAxMeG3WVx1MDAxOYwoXHUwMDBmeNZ2T8fPPm21JtVMWL6eOHCzXHUwMDBiK8NO3mHDv1x1MDAwNrNrtVNB9ELZPcdIXHUwMDE3rS/TYunn7sq8M/f793P7n45cdTAwMTbOfklcdTAwMTfLvaS3z1/708X663fG7PbxbrCfcONcdTAwMDN4t9nd64nrq/OLXHUwMDFm51PnXHUwMDBizbHW1PTN7pAjh3593PWx3k1cblx1MDAxNUXwvXKuX28oPkI1JVG7wepcdTAwMDG6XHRzu1x1MDAwYqc7K6ebobWws3j7s7VsVszQezn3u+F2pbO4KuH+iVm9X6d9LkhcdTAwMTODkuVcdOnhyZyb21x1MDAwZqOrzc3VnfFvXHUwMDA326trYshB49L64UXuXHUwMDA2hbTLe/1cdTAwMGYgd3+dmmlBPlx1MDAxZGvK/a9obm7vTXzxZ1/97NihnpOzk/J42NWsv//93aC7IUSBz/zq/VG/VDOVUNp7mMBy93u+3/ysRvaW3OTo8ubh9/1cdTAwMWR/J9aGXTP71z1+N4CTYlx1MDAxMIt7+lx1MDAxZFx1MDAxNHPwwlx1MDAwN9JcdTAwMTQublx1MDAxYmC/0/764fL06Pj93OjtePPL+I8v+/JufOhV8l+D3rVRaKlkXHUwMDBmXHUwMDE3/vC1v7i25nT5++6U+rK5t7i3uPT5+6Vym3/qXHUwMDFlz/94+vtcdTAwMWb0bvuLb1x1MDAwZrxcXFxi2phcdTAwMDGaxnNbfu7gSMmVy8VcdTAwMWZcdTAwMGLXsytn2+JKXHUwMDBmuy35xYHXXHUwMDA3c3FIQ9pq2WNcdTAwMWFgyPzbazVcdTAwMTNcdTAwMDdQOOTXXHUwMDAzwNvM/PLWwYFeu7hYbW5NTKxcdTAwMWbZmalh18xcdTAwMTfqXHUwMDFlw1xy4VxyXG5cbiz/kcmoX6Z8OF5a+TBA1ePcTbuNraX9hZ/Sjd2dmYVv/tPssOveS1WPYYHwSo2sS1x1MDAxYfVcdTAwMTFYy1+sZ1x1MDAxZDuKulx1MDAwN0Mj50JlOVfI5KeLidlJvy23ttZ+Lu9Nrn5cdTAwMWVbOfrNMLzujVux34LhtULBdf5yXGLv3uLl6MnB/OFne/dz/3p/Y/dyr3nwblx1MDAwMCyNjHBwpe1NkKt6Kix0VVwi8lx1MDAxOICtfup+/VwiXHUwMDFjnu7HT1Pj17Pbu1x1MDAwYrPzPZmih1x1MDAxN2ToPpa6U8pcdTAwMTeU91x1MDAwNYpcXNpEK12PktuTzvxcdTAwMWRGg989mf96M1x1MDAxNaZcdTAwMGXd2eTWwc3Wzi9cdTAwMDHx9s8kX1x1MDAwNeL9ftXEs7vcXHUwMDFiLpLcXHUwMDE3rupVpy302U5cdTAwMTOMMN5cZoBcdTAwMDbUXHUwMDE3XHUwMDFim82rjbGJUzdqj27FzOjcuPntXHUwMDBlm1x1MDAxN0OA6HXBet+Tl+f3Omp/ILd9KvxWIFx1MDAxZre+PM+8ul07i583dj5fjjRcdTAwMTevdjfXPu1u/d5cdTAwMTVcdTAwMTBcdTAwMTeq0I83h/9cdTAwMWbceVx1MDAxMkZxU9y/u/WuQ9RGx1x1MDAwMSbrr1x1MDAxNraPr3aWxu42JmxrWrqp7/eHY8OumH07T++umFx1MDAxZluZM1FcdTAwMGKrtPmXNp6ksipcdTAwMDZcdTAwMWZNeefpert1vTN9u783oT+tnJ78PN5aWlx1MDAxZnLamJrOU6lKXHUwMDBlXHUwMDAx3lZ6aSN54OuGksZn9PX3w7upna39mfFxLVx1MDAwZqbWb7f/NJ6e//H09z+A2/Tn7dV9K73yg2ycXG7zt2dnu3dcdTAwMDc3I63vR9Nna3Jka3focWW/Nur64LaTxf1cdTAwMTjzT+zv/mVBXHUwMDE3cbbSXHUwMDBlQlx1MDAxYjMyaaJduZ74vHh8M/r9csMsjM6NXGa7WnY3nfDSh1x1MDAxOWxcdTAwMWKlkTR//1x1MDAwMEnur1x1MDAwYviD5/pLMUC5Z31LTFx1MDAxZtxOr06Nbk3cze9/siOTi0Pf8Xyh6+TicGBtJVx1MDAxNFA781x1MDAxYUTjkPWcequZN95cdTAwMDdtXHUwMDA3WHQxO3N7vHq2NiFHpudW/c78qT3dvFx1MDAxZHYt6+t5vfjNoLbCR1jFYP7dXHUwMDA1XHUwMDBmq/l7XHUwMDA3mHRZV3r/RjTnrlx1MDAwZluzXHUwMDEzq1vzrU9cdTAwMTPnw49r7FfweH/N/OBcdTAwMTms6KXU2ql/a8nDXHUwMDA054xWXHUwMDAzTFx1MDAwNu5cdTAwMWWJm92Nw4m52fnFXHUwMDEwl3/I+bNcdTAwMWYnQ6+U/UpcdTAwMWXFSjlcZmBbXHJcdTAwMDOiZFx1MDAwZjKGh6/hq/NXX5ph+aJlv6/OtfRkS5/Zz1t/Slx1MDAxZc//ePr7XHUwMDFmrG37i2/2b8Zwyslcclx1MDAwMPbxe3ZV+Fx1MDAxZoeji7erXHUwMDEzJ8szW/L0/PfuNP12/k17RF36XHUwMDFmIXf5dZFcdTAwMTeSXHUwMDFlh5cyQF3/5/Xe4Y9J6b9vLVxcTN2MXHUwMDFmXHUwMDFm+enboY+8ustcdTAwMWVeXGY11lx1MDAxNiZDXHUwMDE5XHUwMDE55e/RUHo9+UKwwcZQXvf4PPL5/Pjz2fz2ysXavV6b2Ls8XHUwMDE0Q5+RvlD38GJY0LYqRsS59jVmbsgqXHUwMDFmwfVStGA9zrj05f73eNnPbkxub3w7uVx1MDAxOLXT7qb55dv55yFcdTAwMDfbylx1MDAxY7n4XHUwMDBmgm3xmslJXHUwMDE5xSvs11vQtp/PLveXwqbcXHUwMDE37nr96PrgpFx1MDAxNfUzXHUwMDFhv6JLOdr2P/3kzi/Y5Znm3dXSzeSVnfbLP+7Pvk6/g9xcdTAwMWZyZnfsenLxYt+v3346u9qZ0fNcdTAwMTfvhlx1MDAwZVZedaTnb0dcdTAwMDf3ZD6PyuGXXHRT3tSbOpmIS1Nz6nLjanFEXqw3z7+f9Np8OTx4RemyI/bR4GDRfdheXHUwMDAwXHUwMDA3a6OFXHUwMDE0vkew8KQyf6+FyW/qrvVt725sonl205z4NKl+fDhcdTAwMDXpXHUwMDFizk6Bjn9cdTAwMTD0eLZ5eIO38tensb9m93BV551v8Z9CXHUwMDFld1/Uq1x1MDAwZXJvRylcdTAwMTF1wnK7QVaFTq1cdTAwMWYvzdx+WZ8+X2md7m+Hz1x1MDAxYj975Vx1MDAwM8N7kIdcdTAwMDJ4rLRV1vdcdTAwMDI3/jnGf2DNJdshpJbSRsJsyp2x+D51vb3xyS5cdTAwMWXLL+rnzMbJ+tnpa6LdX5hVyb6bmX43XFyzXHUwMDE33lx1MDAxM7P3+1x1MDAwZnb3mXnE64r4lVx1MDAwM1xm1/orJPuz/tP3xaubk4Xd65G9m6XWsCtm322Yv1x1MDAxOfRLXHUwMDA3z57KR8BvhtDX9NX6Xi3E3pZcdTAwMThPzlx1MDAxYlx1MDAxZny5IZ4431ifXHUwMDFk3Tw6mL1cdTAwMGJ+89P6yfTx9pCvg4K+/0tA0zoq4XpCzZ7DL3PVnFRbi99cdTAwMTfnVvTCxf7M/sTJ6vyfXHUwMDA24vM/nv7+XHUwMDA3M53+vDWiXHUwMDBizliDWy4vX7qzpZOtkZZsfbps7X/7tLm+vXEyOux25NdcdTAwMDZ0XHUwMDFm3D30MP0mmn/BoFpvvXRCRWntXHUwMDAw7Zvji4mb/Znrqc2bq5X7n5fby8tza8NcdTAwMGXll927NodcdTAwMWMzLa2RXG6qJ37/1nVcdTAwMWbl0zHGXHUwMDEwVblRnFk7XHUwMDFl3zmZbe6vydHPV3L8Zvxo59OwK99cdTAwMGLLNodcdTAwMDYzjXiJwJaP6PFcZo2ayaCt19bZcj2bO9282dz4rm5cdTAwMTbHfi7uXHUwMDFlXs0v3fw4XHUwMDFjdj3r63x/O9S0t1x1MDAxMZmXkL//1EhcdTAwMWbNlJ5Pyepy93v35Xz1qDUn7YXf/+bM5c320dWwXHUwMDEzXHUwMDE09y+n/HaoMqGVlapcdTAwMTe5yJBp5uAlXHUwMDBmqU16VVx1MDAwM0AtLtZutz+P//CnP0ev11e+u3NxfLw09Er5r0FNJyY6Xm1cdTAwMWSz1DexhXBzdk3H1mjzhzP3Sk21/pQ9nv/x9Pc/uOn2XHUwMDE331x1MDAxY+J73Ez0XHUwMDAzhPjHLflteWn/ZnV9zcyPnJqvrbn7YYdcdTAwMDf+6tDrg1x1MDAxZJyLXGJJuMv0d3Bwr1RMq1x1MDAwNXJsP0DhY3R/6Ubsb89cdTAwMDbc4pTent5vbi32gjtcco1idlx1MDAxNz6GXHUwMDFkNS1iUMK6f8G0ZJ9cdTAwMTBcdTAwMGK/0HmhXHUwMDA2wOjcxys1vdRq6c9r3+bNd2GmZleWh137Xqh8XGZccmo6WIFcZtO6V+jZkFU+pOhD+WqjU3pcdTAwMTBUpzfj+z9G7dLu8fSXlVN13zze31j/zWDTusN6vFx1MDAxZmy64zw/w6ZjQysltFx1MDAwZTFoYUU3ipp9XHUwMDFmeuJcdTAwMGZcdTAwMDDnP4VwL7Tf1/3OyNrP+Vx1MDAwM+X33erE1crU2ezm5jugnd3aakveq1u3KO5Gx+d/3KxeXd+/g1xca6eWR+b8UjhbuVx1MDAxZT052t1e23Y/30Hu5s75xcni5M7Y3Mzhtzt/fVx1MDAxYsz8VJncx7j43U9zT3S26O0xhPFWXHUwMDA2XHUwMDFmy1x1MDAwZvLI1Prmytf544nb24WVz1x1MDAwYpsjXHUwMDEzu1x1MDAxM72S8mFCdcqGQFx1MDAwNEquZGWNqp5rj2/yq9qrXHUwMDEwpO7o87833LOjWNxcdTAwMDe2TSfuvFx1MDAxZZr9fs9v9zWA6c/X+OXN883Op/ZP4aSfrqXvSepV3Yqh50FS0XtcdTAwMDSe5YCe+PWidbfzdXX99tLs+/D1ULSWXjVH9Esjr9hcYoqNXHUwMDBmq0lDne2JiKYho7JcdTAwMTaJoHRcIsq6Y1Rb3YL725YvuEzVIPZcZodVc9Wg6/hFXHUwMDFkwZmIXlt8RuJ6fdT5XHUwMDE5k97ZgDvpkY4+2eu/x+T8t6tN21xc3ryQ41+nt79cXM7Mrv2pbj3/4+nv71JOXHUwMDFhXHUwMDExXHJcdTAwMTPIsIFXjP9cdPpcdTAwMTnckn6+ofGIXHUwMDE0a1x0Mlx1MDAxYS1jPYxcdTAwMDdcdTAwMTIj8lx1MDAwMz5QI4Xu9HZtiVx1MDAwZZ6BlJgwuTJCbWtcdTAwMDUy34S7wHVcYqWM9yZcdTAwMTNcdTAwMTis01x1MDAwNqJcdTAwMTSOhI4hXHUwMDE0XGKMOsKG2Fx1MDAwMFx1MDAxN+W5RrhTILxTUFx1MDAxY4mVSilcdTAwMTdKblk1jFx1MDAxMkyKQ7RGXHUwMDA0k8lTQdggXHUwMDE0rk5cdTAwMWJcdTAwMTVU/Vx1MDAxZKtcdTAwMDZcIlGDU43PQ2w01Vx1MDAxMiOeh1xuyFxi8NLw/Iypv2Oma0pcYm+g71x1MDAxZfJsVZ5cdTAwMTNcdTAwMDKn31x1MDAwN4FcdTAwMTfnQ/396kYwXFzL6eA0rWPhvSrPK+NgmlT6j9S6ViCSO8G9XHUwMDE2MFx1MDAxMNaEXHUwMDBl+9GWXHUwMDE3lFx1MDAxN0RScPOCtFx1MDAwNfdrXHUwMDFhntflLcRCu0X2Qri0nNA0XHUwMDE3ZXRRmFp5tlx1MDAwMd2D+ULWXHUwMDAxpcWLzuR52GquyvLB4LTUv2DbcPhcdTAwMDFYU40jgruqyFOMnfBcdTAwMWRcdTAwMGZ7q1x1MDAxNaFcdTAwMTW18lxcQ/B4sOLHXHS06vuFPGNcXFBRODZcdTAwMThcXCxcdTAwMTBnXHUwMDAyTFwizjDU2sBcdTAwMDdl4izCNuVY+uaGsFx1MDAwMnEhQPGhXVx1MDAxNmdVVLWF4nyEKluJp4gzZ2vl+YbyXHUwMDFht6JNZIUz5pdcdTAwMDdzXHUwMDAxaZa/0NdfnW84Q47eXHUwMDE4g1x1MDAxN3iF+bNTSlx1MDAxYqg5XHUwMDFjIHLDelVcdFxyiMJcdTAwMDetjpZRZXZ0Y4hcdTAwMGVcdTAwMTZQSFx1MDAwM88uoiqQXHUwMDA3tfNwq8HjXHUwMDFkhugzeSZEXHUwMDAxy8K3IWzR9TlcdTAwMWZcdTAwMDWMXHUwMDAw/LFQuVwi47p8sFxuXHUwMDBm1lx1MDAxYfytQFx1MDAxYZ5cdTAwMWFcZlx1MDAxNTxcdTAwMDReccdCvLY8uFx1MDAxNlx1MDAxY0TCXHUwMDAweL59/cGIeLU2XHUwMDEyU6Tx/Pwz1Wlbnoc5wbtHjIFcdTAwMGI1XHUwMDA1ljk2cFx1MDAxZrhcdTAwMWJI0p3d0Fx1MDAwN3FaRWiJQ3BFbEn97UZcXFx1MDAwMe7Gwph7XHUwMDFjd5ddnvM0VPCTVmu4vnpHJHjUvTVE8HFcclVulyVcdTAwMTJcdTAwMTOcQUF/XHUwMDA0i1tcIlx1MDAxMGpl4DzoXGbhwTKB9KMhRmgmt3tcdTAwMTVcdTAwMThSXGLEe4BvhVvTzljhqlx1MDAwMvGroCpWpPpIgaGHPNhvSEuWKuJNZvKM515dKJKDaSw4XHUwMDFlXHUwMDEw6Dy8JKwpbon8XHUwMDAymUDYbWutS/dcdTAwMDCPVFwiXHUwMDEwyoBcdTAwMDTV01x1MDAxY1x1MDAwNfxwVSCeXHUwMDAyjo+n98D/s/X2XHUwMDA1XHUwMDAyg0FsjEjDc6FA5is1w3uYMbxfOrd6laY8vGIohCOyRobMXCIgYpNK4DzChVi4+nqBUDSFj+JFRqG8qTxBXHKFitHAbyiYXHUwMDA25CT/gDjoXHUwMDAzcj3ZXHUwMDBlXVxcJs7i2VxuvF9EhkhNiuRxXHUwMDE2hGFcdTAwMTP01mRnXHUwMDE4gVx1MDAxMmIhZVx1MDAxZOJN5X0oeL144nSvXGIlXHUwMDEwXHUwMDA0+Kp9hjhcdTAwMGLLjMuziF+MXHUwMDE3XHUwMDA10a5swFx1MDAxMUpEQ4g1vMBcdTAwMWRXXHUwMDA1XCLSRXDInFx1MDAwZjF2QehcdTAwMDJ1wVx1MDAwMYbCsoCJXHUwMDEwr1x1MDAxYY5DXHUwMDFlnylcdTAwMWVcdTAwMWZcdTAwMWVv5CkuOiC4NLrrwHuuXHUwMDFhVd1ANC7onVxyp27wJEtcdTAwMDRcdTAwMWG4Vlx1MDAxY2BcdTAwMWM4Z3XI7thpxCxpgFx1MDAwN1x1MDAwMVGJNNaf8Fx1MDAxYbkqwfmqS9K4dkNLhTBSwWaE+lx1MDAwN1xim484wiBehE2FV8/lXHUwMDA1xJdwJLhTnORY4pJcdTAwMTgrap36u1wihkxhXHUwMDAyT1xyXHUwMDEzfkSmqshcdTAwMDEjmYlGevxcdTAwMWY8d6xKQ/BcdTAwMThcdTAwMWMyPLxaPNtcdTAwMTJxiJtcdTAwMTH4Qf0jjpvMblx1MDAxNk6KlVx1MDAwMIG3hOC5/rCFXHUwMDA2q1x1MDAxOIHEXGJcYtWEr9hcdTAwMDLTSLh1uHGkOVxiXHUwMDEz6uNSz7CZaszjpIK0mThHo21cdTAwMTHb46zJ+pv1XHJcdTAwMDZcdTAwMTFcdTAwMDFcdKXli8il4UjD6+FcdTAwMTjib1x1MDAwNXbe4eJg71x1MDAwNMxcdTAwMWUymFBccvy6XG4kXHUwMDA14lx1MDAxMFx1MDAwZuBN4LhTVUSXOMRcdTAwMWaGmTZeR0HOa5GUKYRj9IJ4I9Zl4jxcdTAwMWZcdTAwMDXbKvR5JVx0jGKAXHUwMDFiaVKUM0Jn4vBOoY9IlSiw/sVcIl/zXHUwMDBlj08wLZNcYpFtrnfURdwxrlx1MDAxZo6jQJ5ipIiPWnZ0clx1MDAxM1x1MDAxNemfmEimULPAXHUwMDA24Fiyno3cXHUwMDBlwb1zLjtcdTAwMTaBqbAhXHUwMDA2LVwiWKt/t/QyaYUvQlx1MDAxY2Te0WbXh1x1MDAwM4Fk0zGf4//VylNccjpcdTAwMDRcXFx1MDAwNFx1MDAxMlx1MDAwZSiYdblcdTAwMDVlQKCg6Fx1MDAwMWZCXHUwMDE12CiFXHUwMDBi9DholqZcdTAwMDVpQuZ0UzZJl4dziGCowGfgXHUwMDAyXHUwMDFk/SqSMvyfVNlcdTAwMDXi4OD54d3CXHUwMDE4eFfiM/AjXHUwMDA2jstcdTAwMTJcdTAwMDKIXHUwMDFiy4woPVx0/I9EmKldwezZXGJiKlxcmMBhx+tlZTnLUVx1MDAwM6NSaIqgx9NcdTAwMDVPXHUwMDEwcbOgXHUwMDFlM4xoXHUwMDA371WBsLIs60IqPlBcdTAwMWZcdTAwMDbBqVx1MDAwNfp7heugNVI+K1x1MDAxOeC40avAbSBbRORSL1x1MDAxMNEjgliP6DkwzMjSXkl9t7RA2rnaXHUwMDAzgpjF8pghpIPnV3mW4JHgO/ncXHUwMDExqr+4iEwlpJJGcJ2TXHJtebCwjtA7ltNcdTAwMTBS11x1MDAwNvVcZulccvI8uHzE7FCcLFx1MDAwZoT9ol2Gvlx1MDAxYnykRFx1MDAxZTLewP3UyPjg/G2WxUi8XG5GVYjSU1x1MDAxNapeXHUwMDFlwyVcdTAwMTYkWVx1MDAwM4uxmvayoMpcdTAwMDV5XGZwLYPg2teRyrZULIdcdTAwMTNnnJJZUVx1MDAxN/6EhUhcdTAwMWapgqo+5oP28c3BgVxi3Fx1MDAxMFwiNOurXHUwMDAykVx1MDAxN7JcdTAwMTSEh4G8XHUwMDA00utcdTAwMDXSuzrJc4roXoogq1x1MDAwMpF+XHRWpZmIwW3WXHUwMDBirPz4az/9X53/XHUwMDFktF0lZc89oopMPlxiSVx1MDAwNqCw3rj7Nr+5eHcw/uXnz+2LXHUwMDA1f7wyPjPs/SqDXHUwMDEwiGBcdTAwMWOYd7jLju5cXLtfRTWBg8eBxXuPtSw/r+1X0b2bQLxMTNHgS/BJXHUwMDE49Fx1MDAxMFi0UHCvXGJ9uvpVrL8rtoaevvGnXfX4vX+wXVx1MDAwNcOA8Fx1MDAwMFx1MDAxOVx1MDAxMp5cdTAwMDFiLVVN3lMzXHUwMDBidleGZHW9XHUwMDBiXHUwMDA1fpWFqKhcdTAwMTiYK5g2azKBXHUwMDExYVx1MDAxMMNmZGNwXHUwMDBltsTVOIaqsIeIx2y1wJpaWfTOXGK3mYvr+lx1MDAwNFx1MDAwZldcdTAwMTDgglx1MDAxMesjUiXe02ZcdTAwMDKj5r5DVkhcdTAwMTDpws1cdTAwMTW4akSByjhcdTAwMDZaMMHVWJatLMYt7LLBqHNcdTAwMTNTvUBcXFx1MDAxZYJcdTAwMTODXHUwMDA3aFx1MDAxMdxV8yjGpkhcdTAwMTFcdTAwMDJxkoX1ffh3xeNLeIiPrHpXXHUwMDA0XCJaxNFk2oF4g5XienlEU1vkhHhOloXRTFx1MDAxZS5cdTAwMGU5vGDii4i8PnZiXHUwMDFk2uD/I8lhYTsr0TD5sKwnQ09cckOogieIIFx1MDAxYffLWDVcdTAwMTiEijaTx/pcdTAwMDNcIiHSYGs85jp5qkHfabWDdYtcdTAwMTLRbCVcdTAwMWND7oZcdTAwMDOkkVx1MDAxM1i4XmSYtferXHUwMDFheCxW4kdo2+Gxq/JcdTAwMWOUWlBTmCkjZKs9dJBHUFx1MDAwM34zTC+0u9pyYXsnQFx1MDAwMzxccrMnfUS9PI3XJlx1MDAxOVxyWseOXiU6YUcmXHUwMDFhdsVwelx1MDAwNFx1MDAxY0NtMIHrY/FcdTAwMDW3wlx1MDAxYY2NMVx1MDAxM4d8XHUwMDAzya3D+Y1cYrdLxFx1MDAxOVbMcImemlaRXHUwMDE2XHUwMDFiSCqZOorETm9cblx1MDAxZVx1MDAxZTvyUHzZ7uhWx09Swd6wlKfYxeay0Fx1MDAwMm1h5sWuVKD2V02qlEjmTVxmONcyxdC1XHUwMDE3SJPEZlx1MDAxYeJOb/LmeqpcdTAwMGXD97K2pbRlw7ngtCF8XHUwMDEyRkbafe1idoEpV0VcdTAwMDCJXHUwMDA0XHUwMDEzJ1x1MDAxMXatwFx1MDAxZTD9Rv4jjEt9pFxcYFx1MDAxNlx1MDAxY9RcdKTfUUpaZtmRXHUwMDE1JVx1MDAxYrtEaiE0QVxmXFzg6lx1MDAwYvpcdTAwMWFcdTAwMWZcIlKxzUpcdTAwMTeJLFx1MDAxNoFENa3iq4FPQppcdTAwMTY9W5he1Of1SFxmaIaJjIVNRvouc4mKhVx1MDAxODxM+C/cS32lXHUwMDA1mYFQ3lx1MDAxMoGRrsG8oODIq5QhXHUwMDFjQKYor96FXCJ4ZbHAXHUwMDEw4Ytzm18lfqeBmeTrXHUwMDE2cDpcdTAwMDXZi/Rwu1x1MDAwNDFcIjBgW0xmZ9qk4Vx1MDAxY6JSLKL+gmScbXtWXCJcdTAwMWRySdZIXFxmcjzSa4X7dTBcdTAwMTKwtVx1MDAwNVx1MDAwMpGv4dxwNsThfOsuk4hzXHUwMDE0XHUwMDA1O2NQ9lg/pIYrbMNYcKJcdTAwMDWceLWCXHUwMDAzm424VDzXT1xu4lx1MDAxYckmmoPha/dcIqt1dVZTmaRqZPpwiPUgXHUwMDAzvENcdTAwMWahaIGhXHUwMDAxbI+r3rCFi3VcdTAwMWWBobIs15eoIYJcdTAwMTmHh+PZc4cmxkyetIRGXHUwMDE4rlDFWy6RiFx1MDAxN6FZ0Fx1MDAwYtrj0edemfNcclFcdTAwMDZcdTAwMTZ1rWfYUCDRilTPhePVXGJwqlVcdTAwMDPENYg/WN/RsCPkhC45fEGa6ERETIxDqDJTq1x1MDAxMPfgUcBZkdVcdMe5XGJcZsZcdTAwMDefcilcdTAwMDQ4vtrtYJ0xsjmGaJNM5Vxi0GolMn5VUtM84M7Yt8pcdTAwMDNiqFx1MDAwMZ5cdTAwMDdcXL5FXGZbcNdcYmBcdTAwMDNbi1x1MDAxMc9cYmGlzfxLXHUwMDAzKSSsMKJhhHy41PpqNlx1MDAxYvdGiuhcdTAwMTTNt5Mms7NQfVx1MDAwND/s+boo6SSLLlx1MDAxMTaHXHUwMDAwI2hcdDv4mURcdTAwMDRcdTAwMDK4fkE4XHUwMDFiXHUwMDAyznpcdTAwMWbIi4BS8KXQSCFerT5GvDdoa8Keslx1MDAwYllcdTAwMTA08UdcZmIshcuMgS/GZ1x1MDAxMlx1MDAwM+R5me5cdTAwMWJcdTAwMDen4K5cdTAwMDVcdTAwMDFcdTAwMWG4NqZRuJpqXHRcdTAwMTXfdVx1MDAxMUaTsUn0sEhcdTAwMDU9XHUwMDE1ZnusaPNJ4U1Ln6ePli08RLpGXCItLHAtLPNcdTAwMWFL/6fZk4XqyUxcIi2cJtir3d4vukjkhlBwXHUwMDFjQTwnpD82f5BcdTAwMTLXXHUwMDBmh2VcdPVApDxMXHUwMDEzxj2LY6InXHUwMDFkKUJcdTAwMTiTTPzTXHUwMDA36opj4uf8nLm4X5s4+bKxiUD4eu56fthX30glmVWENlx1MDAwNlP5fCbCUvdcdTAwMTCyXHUwMDFiYtuRTWdX9l7FMeSmcLZcdTAwMDTNXHUwMDE5bV3npsfO4lhU8Fx1MDAxY8SrcPme6Fx1MDAwMJY/grlcdLa1vWhdnlTmT3Ws/edXVcdcdTAwMThjwJN6XHUwMDE4XHUwMDFilp9cdTAwMWO0KTdcdTAwMWRs9MD8wf4mk1nkwS3SXFwvXHRcdTAwMDCHT/A+t3Ay/TpcdTAwMDJSXHUwMDEwo1pXXHUwMDAwb1x1MDAxNsTxIUdVRNl4XHUwMDBmTcyNpmK5SCGr81xiRlxuJKYklXz5ioA0XHUwMDFjoryMh0RcdTAwMGa/XHUwMDA2rlx1MDAwNPE1smxVXHUwMDEyXHUwMDE18PJcYihjXHUwMDE5h/lB7n1wwypIXHUwMDE2XHUwMDBmXHUwMDFku/RcdTAwMDVcdTAwMTJNYNhnXHUwMDE5XCJcdTAwMTP9m982XHUwMDAyV1xcJZJcdTAwMWXHsK1cdTAwMDCtwVxcmoUyJO64+5BFXHUwMDA1LF5cIq72muhWi4CoXHUwMDAw/NZcYqxNai3TXHUwMDE1yK7gKkUuXFyJheBcdTAwMTDvuj5DVDA4gV1u1lx1MDAwMFx1MDAwM9LP3OXiXHUwMDA1O7JEmTZUoD4qUFxy5Cz0plx1MDAwNuGk1bk8Qdy8UHjbXHUwMDFjXHRcYrbkXHUwMDEyXHUwMDAzV/s64jlcdTAwMWTiiby3hTPVVqqUSdUro0ZSXGb7K1x1MDAxOVx1MDAxMEips94lbpctaVx1MDAwNEnQhYLiIOudXHQg6Cx9ftBcdTAwMTmW3Vx1MDAxMVx1MDAxYVx1MDAxN4gsZPGmoDONvMAy2+U6d4PHlDWSlcJFeVx1MDAwMkhcdTAwMTHDqoLWuW54xuOas1x1MDAwMMGKmMnzLKZcYvFcdTAwMDBcdTAwMDIuwUbgJTBcdFJ4fVxivXPsXHUwMDA2oURcdTAwMWXBsCDrRUniRfSI0D6txoEp8ypcdTAwMTOIV0tcdTAwMGVcdObfXHUwMDExPrhWXHUwMDFlwTI6VWaQqTsnM2COIU6MMHtcdTAwMTY465XFNCTL+5yjgMnDm8lQSJG2QCf0N216ibyoXHUwMDExTlx1MDAxMFBMY1O5WVx1MDAwYlx1MDAwYsRFb8TfXCL8tyXAXHUwMDFjXHUwMDE2dUQqJVx1MDAxM0OtquJYZzTEtMpEXHUwMDA1UVwi7uXwg39cXIPkujYmXFxMQVx1MDAxOT5Jw9F07IzjVFXzX1x1MDAwN+uHQ4iU2/PRXHUwMDE2WFOTsNM8Y1SW7F59wzC7YanUJfxyiaJIgqOj98zqs6FcdTAwMTZcdTAwMGa9g5XyxPkp3HRcdKZcdLk58mREkaztuopcdTAwMWRcYvCZkmlcdTAwMTdyXGZN0ttcdTAwMTJxQmjNmVx1MDAxMFhcdTAwMDJXXHUwMDA1Ylx1MDAwN0KQoDyuzeJRkLXgVKRcdTAwMWbgIFx1MDAwMi1H5WYjy4RS8sVbhCVcdTAwMDW1jVx1MDAwNDVM01x1MDAxOCxgcZCoKlx1MDAwZvZcdTAwMDHBXGKsQETiVYDqhjyC+YTGXHUwMDBigeeQ1VNcdTAwMWJcdTAwMWKBddRcdTAwMTBcdTAwMThBslx1MDAxNl5ipThXYFx1MDAxMczDzUSfc0DJVFx1MDAxMZXERCCbKzKi0FZohGNu5zKAXG7jXHUwMDE3nFxuXHUwMDE2gnGqS1x1MDAwMFeQx+5cdTAwMDRcdTAwMWRcZvyDqIZcdTAwMWFE8GrB6YDITFwiXHUwMDE2xC5E4cKEXHUwMDEz8kegj8vERWKcXCLhrLy6ksdnYYd1XHUwMDAygkOaz1x1MDAwNqpY49EsvtEqM6YvXHUwMDExKIniYSOFM0nVPq5MsH14dolsmk2CXHUwMDEygVxiauGkXHUwMDFkOb6Q7DiXXHS0KUVHaEP4Slx1MDAwMS5Zc0bQst7DeVx0lYujgXWpq+2KjFx1MDAwYlx1MDAxYyFrk/TihINZk1x1MDAwYvRcZpxdXHUwMDFiXHUwMDA1WVJ41yxV8DTBICBcdTAwMWFDMJFcdTAwMGJk5McxZGi8KGiKPExcIiCShLeEy6y2cdlXkjQyhCBBu+u7mlx1MDAxZlwikF16j2hcdTAwMTYvXHUwMDA0Jza/ZVx1MDAxNrTxLFx1MDAwNJ4wXHUwMDFiXHUwMDAzJVx1MDAwMlx1MDAxMZimvlxc1IpN0fycXHUwMDEwL4lQ3dAxXHUwMDE1XaBDSlx1MDAwMFx1MDAxM1xmN4tzV60ucVx1MDAxMMQzXHUwMDE2QYbCwaiSMlwiXiBCZlxcocZcdTAwMWK2XdR1LFwiI+X3+Fx1MDAwZcL/kiRcdGdJ8ndzNFx1MDAxM1x1MDAwNzC/QMfnx1x1MDAwZVx1MDAxNbdQlkw/wLJD0XC7XHUwMDFjXHUwMDBmqla+aFx1MDAwNo1nsMutXHUwMDAyOHkllVhEVDAhhsGnhctcYplAvCRcXNlD68WVvFx1MDAxMaTAiJ1wlD17ui431IJdXHUwMDEyg3gtMPookefSVKnhqFxmbinzm1xiXHUwMDFkXHUwMDE4yjlaLV90w7BcdLgyb4l4xL2ZqjzLVriQbFtpWVx1MDAxMOxcdTAwMTK7yeetXHR6pi7KqjxcdTAwMDKpdVxuJJCflFxcXtBEqlxizmCIzEpcdTAwMDeOXHUwMDFm4l5cdMRQRE+UiIM7JFaQR1x1MDAwZa/QV+XBarOpXHUwMDEwXHUwMDE5McVcInV+gCCLhGLEk6zKY55cdTAwMTNgoVx0Y9ZcdTAwMDUwdMizsC5pXHUwMDE0XHUwMDBmwXOs5m6eUUdcdTAwMWFQTi+/aFx1MDAxMj5cdTAwMDbNIDDiXCI48Vx1MDAxOary0npcbiY7NGdcdTAwMDWwezZLXCI7rVx1MDAxY5s3UVWPr2/AQuCGXHKnPZjr1MpTsJg67T3DXHUwMDAxJrq4XHUwMDFhkDtcdTAwMGVApL57YCRRdHlcXPzOIM/gqVfDXHUwMDBl14BB0WxhXCKSILSoRFx1MDAxZZ6bT15CpCC/ms2w0cBcdTAwMGUny1x1MDAxMKFgcpjqXHUwMDEy2ZhhsoxcdTAwMDNXjbIs3Fx1MDAxNVTJ4pVF4neKbjhcdTAwMTBvwKFcdTAwMWQ8KJHNg5pcdTAwMDZcdTAwMWLUlklcYvy9KZn9XCJQSXNwXHUwMDEzfoLX6avyNMeyoZbEV2hbVG+KRHhcdTAwMDZJcJjKQO2ac/VcdTAwMWPBXHQ2JT6u5IbxcVx1MDAxMUNcdTAwMWGC5SBOPuxGXHUwMDE0XHUwMDEwUlx1MDAxNM7jiZJZS6bfkcoq6X1D5bypXHUwMDA2UTtSOjolKFaJtUdqhnCI9pfBXrVcdTAwMWOmyMNAO1x1MDAwYvW0XHUwMDFjMi2Ql4prXHUwMDFlmVx1MDAxYYfTM1xcNtWTXHUwMDAzK5LD7SFcdTAwMTTYXHUwMDAzTpaGaNPYXHUwMDA3Qlx1MDAxOaey2lx1MDAxMFx1MDAxMlx0jjlyMJuDTFx1MDAwNfLYSjOkMYBBXG5OdOHQ6VVcdTAwMTKpXHUwMDAyT3dJQ5mVRDxAzlx1MDAwYlx1MDAxMrxeXHKjidfkmIkgW1x1MDAwNNLW+sRwXGJaWc9V1i6Yt2Bfmrbg6Vx1MDAxM3WtrJ+LYfNkbkwsxW9brbEvX/XswTc99K0s1yBGKHBwxcSYt7KgRTj/XG5nmmb243iJdCOlXHUwMDAzmnO/jk3np4889bI4Tlx022c55eeRXHUwMDE4dNPkRs5cdTAwMTF2tuP+dLJcdTAwMWW/94/ivFxyZ0ZJieBcdTAwMWSz+byzQYumXHUwMDAygUYk1HP16DeYSsWhupAstsuhLYTbScdEOuhEZlE/klx1MDAwNWdokFx1MDAxNSqWtFx1MDAxMNN09Ye4XHUwMDE1XCKF78S+XHUwMDE1zOHDnVx1MDAxOFhcXJOYjqTKOy/4XHUwMDA11nMrMecjXHUwMDBiOHB0Q8GzI1x1MDAxMcZJZbEsR4yQ2EkjTcHj85xcdTAwMTaqk2dcdTAwMWFMXHUwMDFi0kxcdTAwMDQxajlcZj1lKVx1MDAxY8lCfls/rmOQ2CBBZltcdTAwMDXZplx1MDAwZrk0XFxcdTAwMTk8l/KskEpZX1hm91xcMNRC8I5LlDnq3ivPtFKxbEBcXFedPMSWXHUwMDEwxj6JTiN/XVx1MDAxN4hnhkRcdTAwMWGeN1JcdOtdv2twXtJ5dl+jzFx1MDAwMu2HLItcdTAwMGI+XHUwMDE5tOBcdTAwMDXXXqBvOMRXsF7Ed0Ntuq7PeK1YXHUwMDFk1ZbhU504lo/x4VRrQDyRI6BcdTAwMWNOjeT0pibvSX1PKFx1MDAxMD3kXGKMXHUwMDExiNpCfrOW98qymXJcdTAwMWOSq71ZpK2ellBE3yb9yeRBiKaR4PStLWCZYX2WlLpcdTAwMTJpXHUwMDE5Ydw+P1x1MDAxYYrkXyzg4lxiuXroU2JEsIzBXCK34rlcdTAwMWOxSqhcdTAwMTWioGBke1x1MDAwNrJeIFx1MDAwMk9CSG2MSEd8lF3gLFx1MDAwZVx1MDAwNJKNhbpcdTAwMTJcdTAwMGIw1OSo8nx9rNPCyFRcdTAwMDVqTuJb1jslMZf1dZBcdTAwMGaQx/IyXy7JXHUwMDE0hMvlcZJcdTAwMWJcdTAwMWFcdTAwMGZcdTAwMTONmKI2kE0vhK2aRMXjc1xyZO2UTKyJpVwilYdcblx1MDAwNLLMQO5cdTAwMDNyrpnMXHUwMDFl6Fx1MDAwNFx1MDAxYyNvkuSwdH29OnI6mGM4nLD2OVxcQTdSq1JcdTAwMTEpRMBo7etlpYO9QzJfwVxiu/zqXHUwMDEwIVx1MDAxMbqL9ILurVach3UmlYVcdTAwMTCRuUhcdTAwMDYrQExFXHUwMDBmRd48XCIjTb08XHUwMDE4v6BSNVx1MDAxZIeeTFx1MDAxNbm8aoxWL46kXHUwMDExkplhlDZjJ2tz08FRKmUs+Vxu662VTePnSNWl5Jy2y19cdTAwMDZ8Llx1MDAwN1xu2ZYmXHUwMDFmQ71vY1LN7vTD0HjXu1xyjkPVjFx1MDAwYqyqLdJQt1xmwciCRUfrfa55XCKxVDAtXHUwMDBisp5cIkpcdTAwMTMnnYgl6P6j7zpcdTAwMTmRXHUwMDE100i0hnG63pYqkv2wXHUwMDE3zovgXHUwMDExzoe1WNYkX1x1MDAxMlwiK6h0QVx1MDAxNCSZXHUwMDAx42RwLIYhTyZPaoI1XHUwMDA0K8CyoIPNklx1MDAwNS5PyMTMXHUwMDExMuJcdTAwMGLuclx0MiGULcfr6iNcck40XGJ4XHUwMDA1nI02w03M5OElXHUwMDEwXeFS/dCVQPXxu8nPg7iJ0G8hM4HswVx1MDAxMr7NvnSobzRcdTAwMTFnXHUwMDFlJKFcdTAwMDSIPVlXyUZcdTAwMTBcdTAwMTFmykTNSOVcdTAwMTOcXHUwMDA3qZOYwm2yRzhcdTAwMDYvXGIoM9YuiESAxCiX0N4y/lx1MDAxMIJ3XHSuR/aHnNnkI2WcIVxuiW+WhSGoeFx1MDAxMaA5sFvCdrZP8UpcdTAwMWXEeDxIw83S7HKUXHUwMDExmTI8Jo1ftJVcdTAwMDVvXHUwMDBmXHUwMDEyLdkyYVahksHGXCJAc2KZYIZcdTAwMDH9hU/LI6OE+mVUzC4r4t+S51xiq1x1MDAwNFx1MDAxN0G6KJfx7/GZqEB2XHUwMDFiMr5cdTAwMTBTV/KuTSCOPC2j0jSieeiBjFx1MDAwN1x1MDAwNlx1MDAxNm9GMaEqgkjDMpHNwZF7wcauRElcdTAwMTD88kjuUkCbJ9I8XCJcdTAwMWIwpKHktFuOXGZP91x1MDAwMO1cdTAwMGYkXHUwMDE4kvVcYmnixjgtrjiUQqBXhlx1MDAxMuKvNCmYwDHkf1xuSE2HoFTVXHUwMDA3dS1hXGZcdTAwMTG4XHRXvjtndX3y89Fm06xfLMdvd2eX13OrN0O/IE5cdTAwMTGk9ESH6KpbXHUwMDBidWRcdTAwMWafJoE+uVx1MDAxMzb6zrUq14DhQeRcYjPJwchcdTAwMGVI9VOpXG5cdTAwMWbBKY1IXHUwMDExNGtroouSQCZcdTAwMTavjtGwP6WqjylVXHUwMDE59jFoNFx1MDAxOTT4PD003IZcdTAwMDNbIIirqO/IvrMwWDuORCOMUfA8WaBvXHUwMDFiqVx1MDAwZmqFcFRVV9+AMWn+SrjE68KUN5Mn2fGFr1x1MDAxNOxa1Ftmg+DNJlBcbvybz4tEiLO5pDxhJ/Ht+v5cdTAwMGKZPFx1MDAxMFx1MDAwMHB2XHUwMDEzp8bnNtk2LDmj4Fx1MDAwMyxrUvVZXHUwMDFjyf9cdTAwMTC84dPt5+1zeVx1MDAxY6KS5CkwviQwYvBcdTAwMWRxWlx1MDAxZH89geUmk1x1MDAxN+FHSFx1MDAxN1x1MDAwNrG+oFxuo1mFofvhoFwia1x1MDAxOVV5qepOl8tcdTAwMTEqct3Vy+PiXHUwMDFhw/YkkWXVbs5Il8EpXGKxXGbBdshF2JTLiZfZvYRfxkfY5kVcdTAwMWNTQFxc9lx1MDAxMVx1MDAxMlx1MDAxNc9cdTAwMDaO2lx1MDAwM2lHXHUwMDFlXHUwMDExOXL9Ro6eMlx1MDAwZiqQJ1x1MDAxNGuVrFJcImW3IZdnuJaaOHRcdTAwMDRNRVxc51x1MDAxY7Lk0Fx1MDAwMFwiVU/KjJCHvoqjhsSYKoNvXHUwMDE3QMtcYrNB3k+yjMTeKLumXHUwMDAzXHUwMDExXHUwMDA1elx1MDAxMktKYpaLprBccpLOREHXZr3Mq+VcdTAwMWOL0DatKy1cIlx1MDAxOUijKVx1MDAwMqZEk1jBeGfy+IqhOau9SD9ccvLYkvFXySifoElCo7RcdTAwMTT5RVx1MDAxMjOvqDckg1x1MDAwYlx1MDAwNdRcdTAwMDVDXHUwMDExsvVkkYpkslx1MDAxM4PsmXbX4/fG3MxsXVx1MDAxZf9cdTAwMThd+jG1fL56szrsXHUwMDExm/bsXFwoeFxuT3hHdaUvjlx1MDAxOdJcdCfIXsZpXHKfXdg7XHUwMDA2bGxcdTAwMGKSx1x1MDAxM4dRd/R8O1x1MDAwMja4RFboOJThOvL2J1x1MDAwZSlcdTAwMDKxONv4J2D78IBNa5JcdTAwMDRcdTAwMDdcdTAwMTK5d9PnxEQp4WFcdTAwMDVIIFJQwHtncc6yR1xyW+5cZsyb7lxu2mRkMVAzXHUwMDBlLCBcdTAwMTQnbIdES4rYLaTBMlx1MDAxMydttFx1MDAwNPkpkq/UT6sjZqNjjWzlS2OzVJogJlx1MDAxMkmwXHUwMDBlzUJHQczBUSku/0BcdTAwMTDqM1x1MDAwMnqIMzFcdTAwMTEqwHV4uqp6cY60XHIx7ZGRxCZn8kgkXHUwMDAz75dAK6FcdTAwMWVipemvmUSJxFx1MDAxNS9zVoc0qEb4syR/eUGEqlx1MDAxY1x1MDAxZV2I5IjIa5WOT1bKwPiLUVjBzYpAolx1MDAwZpNwd+RZyORlXHUwMDA2pyB4SdtxJTGSkeRReWOPXHUwMDFj96Tu8twh7EvI5z9AXCI5bnHYXHUwMDE0SbRx33k4RPJcdTAwMTLO8Fx1MDAxOE8q66JZUHLhcvTRkUZG573RVOOHI+XiXHUwMDA3KEJJpEEqStw0d6uQpCNvXHUwMDE4Su5aJqc8XHUwMDA3a1x1MDAwYoCIgqhfLdjh4VV2t/dIrO6dSlx1MDAxY+GxKKZMUW1qaZGIQMg8vGKzzvmncdZcdTAwMTJqXHUwMDFmXFyg5fhNXHUwMDFhmjM25DO1+G1cItFcdElyk1x1MDAxNcDfXHUwMDA0+bZcdTAwMTUpZ1x1MDAxY0kxvFx1MDAxNnlxUTmJwFdzLIlLRepcdTAwMDHKQ1x1MDAxMbH1LrKxQsp5t/JFdX70JrbUgdr8svn94Ojr1tnB1fLJsIdsXHUwMDE5IKxcdTAwMWGxvTdcdTAwMWWsub25uVx1MDAxZLpDNs+egSSdLImIOiZsOlx1MDAxNr2yl1x1MDAxN7iGy5HLqGNcdTAwMGbnQ8hcdTAwMDavXHUwMDBln6pEXch2On6lro/N/ObM6uxZXFxem/q8XHUwMDFkwy9cdNmeNem3XHUwMDBl2Vx1MDAwNiY2XHUwMDEwMGuWPidB70VcdTAwMTdcdTAwMTdcZpFHXFzB4dK0SYmfYFx1MDAxN0GyTVx1MDAxY1x1MDAxMlx1MDAxNEWonCvBkOuI46WRXHUwMDEzLlx1MDAwNe6WZDBcdTAwMWOpXGYsXHUwMDE5XHUwMDA07lx1MDAwN++ywnBcdTAwMTCknieMm1x1MDAwMLZcdTAwMTLDjlx1MDAxMDMmXHUwMDEwfJrK6uqeQF95XHUwMDAz3Fx1MDAxMVx1MDAwNZtZwE4k0u4xQ1x1MDAxMLTlQ+uqkEhcdTAwMGW/XHUwMDA2Mlgr4pHLyNPZ6zbsXlx1MDAwNva+M4nVtlaJO4t49CyccbTJ5HVJdt5cdTAwMThcdTAwMDZxqttzyrIgJsiag5k8cjlyMCVNgZbwg7HuIzhwqIieXHUwMDBiUeVBRto3xUUoibGwaPKJY1x0kf06hO5cdTAwMTlcdTAwMGJcdTAwMDEnKzhR6lx1MDAxZYlcdTAwMWVcbqJcdTAwMTZFTlxmQnCgPlxiNkze+ObyNtKNOrKlXHUwMDE10SRoXHUwMDFjXHUwMDE1UnhBI4mtyFx1MDAwNWpmXHUwMDExnFODXHUwMDBiKGFcdTAwMWJTjcS0XHUwMDFmyF5La1x1MDAxY7tcdTAwMWHVrFhcdTAwMTkyradudslYKfFzVnE9LEHxOn+IrNKS25Hrf0TR3lx1MDAwN5JcdTAwMWFcYlx1MDAxNVx01GHjM5dHzt1cdTAwMDTBI06w5Fx1MDAwMn2yN6k2KbNcdTAwMTluyotcXC/A8TJfslx1MDAxNWAkJW/MfVxio8SVdMnD20qc+9x9ZkqGwm3Ca3BcdTAwMTVCJFNxLo/rXHUwMDFljCFcdTAwMTBcdTAwMGJns2ixI3NktkA0eVx1MDAxMrM1XHUwMDAzaXEmjDaHs3BOrKi3Xpa7/0ggwH5cbsL7XHUwMDFjLcF9iYaMXG4kpCxAojKFVFwiJefk5zNdeFx1MDAwZZlcdTAwMDbViEySqdRYIDCyJU1cXFx1MDAxY7GApouwWaVcdHQqtCRcdTAwMTlZrUCCUVx0uuAyL1x1MDAwZWzn1V2XXG5lXFxnkk5zyaaa1I9cdTAwMTJpLUjM+cU406k05/Qtt3KoXHUwMDAyNXRk+VBcXPXnOJDXZa6J0/eG++2I6i3Z8yNcdTAwMTKwXHUwMDBiJp7ENXldl1x1MDAwYl81u2lRpy2zXHUwMDA18nBcdTAwMTfcN4tLlFxcaJlnMtxcdTAwMGJByuTE91hA++ZJ1shVXHUwMDA33IpcZoOTXyF3STCyIMstx2JLdlpcdTAwMTJ87tKqJE+u7EqARIFk6CUnsuRAUr3WeDLrXHUwMDEw2Z3GI43KVkBcdTAwMTAnyIVcdTAwMWSpulKyXHUwMDAyXHUwMDA38ohiT9IsZ5ur8lwi8kNCOPBi4GFcdTAwMGJmIyEvXHUwMDExa5JfgjiNbFx1MDAxNFxu1sCT+pNcYkhcdTAwMGVAl8jjkFx1MDAxZI9cbqlccky+t498XHUwMDAz3HL80PgpeSOOnVx1MDAxZpxcdTAwMDJSaWdcdTAwMDB6+uNIMCPXt1x1MDAxMr1S8oLpmFx1MDAwNEehkTZXL4+s6yq5JZ9cblx1MDAxM1x1MDAwNYxcdTAwMTEkJOHiXHUwMDE2rjOB0bPZflx1MDAxOc/Bf0v2LPJ2XHUwMDE3aTTZXHUwMDFljWYkpILM9ojhncM8XHUwMDBi8pZyI1DJ04PmwVwisZvKTYXZpKBOrDeKWFroQH1cdTAwMWOcIKRE8lx1MDAxYW9ZdM32/djASVx1MDAxME6Bslx1MDAwNVdg9Vx1MDAxZMczcKJYZiBcYjhbXHUwMDAymCCkXFyvxfDD1lx1MDAwM3BpUslqzS11hk2pfL2W4Vx1MDAxMk+WkFx1MDAxMmdYgbhEXHUwMDA0n4bgYTRjNrdJUuVAXHUwMDFlXHUwMDA0Tlx1MDAxNFx1MDAxNCz/cuRcZrdcdTAwMTbRKqmAQ5Vtw0D3ZKCtZVx1MDAxM7Ng2IJcdTAwMWWO0HRcdTAwMGWlJ/BpdrPcXHUwMDAxgHjEcGWeLmjksYirXHLpYVx1MDAxNFx1MDAwMXcyu9m0l5BcdTAwMDB/Vj9cdTAwMGKSXHUwMDA3y762YfWMI/OyXHUwMDFhs5lcdTAwMDbXYuI9XHUwMDE4zuSogsalbUhuSJKajo1cXDQ5QVx1MDAxM1x1MDAwZV+AMiFqgukrofFp91x1MDAwZlx1MDAxMLVxr2XIZpDJXHUwMDEySjvPeK7g2Vx1MDAxOdLQcfiT/U9cdTAwMTjMkElj8ZnxmnBcdTAwMWPPKVx1MDAxMJfavVx1MDAxY6hcdTAwMTDJ9VfFsW/NQfHAZVRcdTAwMDV+nFx1MDAxYv5cdTAwMTIxXHUwMDAwjTJcXHrMxHl4KFhcdTAwMDGTVkbWSiN8XHUwMDAzskjxodglzu6Vay1IXs49XG6yiGJIXHUwMDEz9K1cYk7mfrlseFx1MDAxYo81rc32aVx1MDAwM3ZJusXBXHUwMDE5bqZg50Nny1x0IU9cdTAwMDRcdTAwMWWwgFx1MDAwNJNZZoE8cnGk/IdcdTAwMTiJbFx1MDAxNTJcdTAwMTUlcFwiWSe+tpJki7vGXHRh5Mos6EI+Wk6OXHUwMDEzlUpMjK1q5THDxXlE3pa4k2V1osk0PC89plxyT7qIecHCopCdQlx1MDAxMlx1MDAxM2yqikybwuhWs+NPQ1Ygj9hcdTAwMDDB0MxcdTAwMTDR6bPb1SSDwnPwXuJ/Slx1MDAwMFx1MDAxMUhRNFx0dVx1MDAxOOGS3SUz8JHWJJBh0lx1MDAxNSB9UilIakHyfMTfXCKKzN9cdTAwMTJXQep75EWhJLEkQ1x1MDAxNOOAwIVcdTAwMDWWkXHmILm6gSPsllx1MDAxMVo9Kn0kreDi4Fx1MDAwM8HNpCXPafNUm/SfdDeqhDGL3KNkuHteXHUwMDEzkkVA3GOOqEAnUvNcdTAwMTLcvOC9cNNcbnNcdTAwMWaqblVcdTAwMWVHcmxK93GQQ8mWXHUwMDAwri0muT33qMts0oJrN+A3mMFwT20sWdmHx8LdxJboOs6H5dvHWVx1MDAwNyDAXHUwMDFjXHRcdTAwMWM0q0Ce4dAkN8ThhGqds1x1MDAwN1xmXHUwMDFhMvNcdTAwMDLbfO98RPlccpP9KCpcItW1iYLd34InXHUwMDE4uJJcIqZlvqFKvsCWl4RNJVqOXHUwMDE1sXrgONc20DCz3Os0WcVVVaBO21x1MDAwMSRn9cjJV3+Kh6FZJHs3i1x1MDAwMnd+qo7uYm2z6Mfyzsz0/Le1/dOj7+Mjt2595/DYXGZ7s8joXHUwMDA24Vx1MDAwZZYs8bojXHUwMDBmaneLnGdkLriYXGIu1LxcdTAwMTXf06dZxMNO3YeJ8C8tieNHqKd0clJ2WOgnQDZcZkaUyIr+dIuGrVtkWClBqkizgVA6I1x1MDAxZEGqrTVcdTAwMTdBIVxmp9EsYOZhi0NZMj3bNiYoq8/AhLKETa5cdTAwMWRcdTAwMWJ80Vx1MDAxZXq2JKxMykfWUZdcdTAwMTVUWFtcIlx1MDAwYlx1MDAxYtVUm5KN0cRmhGT+uVwiz6oqXHUwMDFjmf38SFoy7vGMREaW9CRYWLDEY8JF4PZy9lx1MDAxNlJEe0b47eHDXHUwMDEyhijclORyUslgJcZMXCKxdlx1MDAwZXFcdTAwMTmX+8DBXHUwMDE1hcnKk1eRz4i0YrYqXHUwMDEwXHUwMDE5qlx1MDAxNfRcdTAwMTSOZamCXHUwMDFk4/ku5cwpSss5XHUwMDBlUipwNW3Bvlx1MDAxMt2A9zKS04BcXEtvMnmJxDr4XHUwMDA0jvWyiMmUg7S8J3KkqZCXuVxml7SSjpfs71x1MDAwNYtAdMMknk1STmhcdTAwMTJaVKNcdTAwMWVBzlx1MDAxZcPuKneql3Q4OKqqXCI3r3DcJa9LXHUwMDExlMat1+RccnZcdTAwMDXpMsdvPVWaxPakvs0omHxIRXSXVr7rXHUwMDAygmTE1tyakZhoXHUwMDA1RyXy1dEuoeVTiZm761x1MDAwYlx1MDAwNCZcdTAwMWFT6KBt72LPQ2/LXHUwMDExXHUwMDBmLlZDoO/q4zxcbnTkcYNcdTAwMGJU3Fx1MDAxZVJ9xY/fJZGe4dhqibw0Qkw274hcdTAwMWM5S12U59LDtJCP4XSJOFx1MDAxOVx1MDAxMVx1MDAwMHN5MNlgY1VcdTAwMWPeXHUwMDEyuc60Ylx1MDAwM7SEx7RK951cdTAwMTeT0uZcXGg7Jyl8Qd5CfSHqn1x1MDAwM1x1MDAwMNxcdTAwMWSo8ipcdTAwMDHUTieOSTLplsgjIy/Bh5KWXHUwMDBiWV5VniHSkXt3XHUwMDE0XHUwMDBiiSUvg0RcdTAwMTFIXG5oi2FQs5JcYovKjqs3Jbf4lVhcdTAwMDNcIphcdTAwMTMqjf0u1UXQzfZu2jJcdTAwMGVdKljiXHUwMDAz60JcdTAwMTJa5s5pXHUwMDE1dnWTN2E+MIBcdTAwMDTVs1x1MDAxMFN0u5I5PbPEkJhcInRVXHUwMDFl91x1MDAwNZHhR/m0PKLAOjPiXCLSQ1x1MDAxMVx1MDAwZmhySkCXSFx1MDAxZsjomdopXHUwMDA18rxgzUYwXHUwMDBmw5ky2fVxLyNZLNjzlkVVXHUwMDFiUslcdTAwMTNZQUpeV708327i01ux2uGLmu5cdTAwMDRcdTAwMDGS9puwpuAzXHUwMDAySa7B44RyastcdTAwMTa485iIXHSgeWmDQ9W3efYguJkp9Vx1MDAxNEI9+JWQXHUwMDA1cnaQXHUwMDA2lcT13mWM6TAoimNcdTAwMWScPSpiu+VcdTAwMWUgJkG4XHUwMDFmXHUwMDFmnchcdTAwMWVcdTAwMWXnqGxcIlxcZoRbRF6KiCe2iZ9po6tcdTAwMTWClGg4zyCfTKklWFx1MDAxY28496+p0Zzhztgy03I5zUk1R5qkXHUwMDAyeVxiQiUzWO3TaGC1ZIj8Q7KxQ2pJNlx1MDAxNUqQPYJcdTAwMTg8nFx1MDAwMfZoXHUwMDFj7UKmL1lGUydcdTAwMTFXXHUwMDE4SawmXHUwMDEx3sFxR58pXGa+Z1wil16RQrJkLb2HibLcRlx1MDAwMrusodjZXHUwMDAz5MbuqPBcdTAwMGLJ7VBAxSDTVl/FhXBKZKFcdTAwMDFeryX/XHUwMDAy19nRXHUwMDE5XHUwMDE0iIOusp5cdTAwMWE5P2ZExq1KnneOIeK5cdFsvTQuOfVcXMSQqI9N9m5ccoNcdTAwMDXJpW1cXDtRQIvByXiuJyaFXHUwMDEw98lnhsBaXHUwMDEy01x1MDAxMoAjQ4HfJZSDe5nJ7Jp2X2ZvludQk3CCXHUwMDEz+1x1MDAwNVx1MDAwYod9jPDjgnk7ycGrRpQlOiRHKu1cdTAwMDao9Vx1MDAxOVximGm/XHSQXHT8IZuxyFwi+InUI27/0CVcdTAwMDNcdCqtikY2XHUwMDA1i5KxXHUwMDBmwKGxwESSpXTOXG4uzlx1MDAxMIfIZaaOmO8qwsjCXHUwMDA2kDlcdTAwMTivlKi8ejCeTlx1MDAwM732KVxcznpcdTAwMDZ4XGaIo0i+wcVcdTAwMDAl863pwVxiafAqgsnbLVx1MDAwNKdcdTAwMTMhXHUwMDE52MatXHUwMDE3hribYCrN2lx1MDAxZrtl1cAsMVCx8lx1MDAxZkLB1lx1MDAxZVx1MDAwNI2aTVx1MDAxZfbySPyfRXl8O1xcrshcZlvWXHUwMDFmLka0XHRcdTAwMWPIfYNcdTAwMDKRSlx1MDAxNsNcdTAwMGZcdTAwMTgh8+JcdTAwMTCFPLKQ+izeXHUwMDFlNIDnk4tcdTAwMDReRO6UlTLjtFx1MDAxZDTB0G2uPE/0hWN74W1cdFx1MDAxMFx1MDAxMzRp25w8mm2vrGw+YILGXHUwMDAzXHUwMDAxXHUwMDBmRjYrrkmoNtJcdTAwMDdOXHUwMDFmeVhDXCK1i3w+rqtkPmB2y+SbMTu7XHUwMDFmhjvP35Z8szZArKJPOKaQ9URcdTAwMDYvXHUwMDBlsHjhWKtDRFx1MDAwYv1cdTAwMGYhq9hcZlq8YHWFpCdkTSaWI1x1MDAxMzdocSWVf1x1MDAwNDGsrKs4lddWXHUwMDA2Lv+kXG6VYneKwFx1MDAxZpJcdTAwMTC9sUKVimiEr1xukic6/dZcdTAwMWFau8xHXHUwMDE2MJ/Y+POi3MBlvodSJPsseOZ4SDHDYVxyXotcdTAwMWOGLkbvIWVy51x1MDAxMF/+vFastotxO1x1MDAxZnbWRpa/bWm/JW5up/ZOXHUwMDE2rz9ccn1cdTAwMTdcdTAwMDO5prfw9spw2uq50N7mleFuZsGJRFx1MDAxMjN1MCS/f1x1MDAxN1x1MDAwM1x1MDAwMT3ZlVx1MDAxNDP2XHUwMDE3ppTbXHUwMDFmYYKTlk53TMU8MSDT8HBV3tN3/nQxXHUwMDFlv/fPdjFk4qpAXGaWkFx1MDAwNy7k03LVPcCyPnpNXHUwMDEzKjJcdTAwMTLZQlVg1p5cdTAwMGa9ZPuKSzojpN7laiqDaIfp2H/yb1d2KpdgLUiGx5p0YuXLKfu69j5cdTAwMTdcYoyc+YxPa1x1MDAwMbpcdTAwMDDFlc3UXHUwMDA1XGZkdPVRpz0lxF5cdTAwMWKd33S2Pbto1Vx1MDAwZlx1MDAxMriI+EHAXHUwMDBiylx1MDAxMHNQdrbhu2hVXHJcdTAwMDFcdTAwMWaIXHUwMDFiRODkRlx1MDAxN3NJdVx1MDAwYnlcdTAwMDEhXHUwMDFlXHUwMDE3XHUwMDE0cP9cdTAwMWO3XCJxXHUwMDA1Z1x1MDAxN3BcdTAwMWOBmyGpKTQojfrUSlSJa5etOvhIbj3IXHUwMDA0kpSTi5lY2STgoUAgmeDT1FY74stcdTAwMDRcdTAwMWFO3epEPU0kVK080mUynON8gGVFvlx1MDAxYitcdTAwMWZcdTAwMTJ5nUl7wopWn5lcdTAwMTTPXHUwMDEzqVx1MDAwNmWLoovNWHFqmVA3r0tcdTAwMTbVMt0gnVx1MDAxMqfAdFpcdTAwMGaYP0RcIvmRLJv26G+tQNPgelx1MDAxMShcdTAwMDVcInZDiEj+ltNcdTAwMGVcdTAwMGJcdTAwMDaYlvjCXHUwMDAyeVx1MDAxY2K2XHQnxFJDPlx1MDAxMCHZoY1MbWLai1EgkNtvuG8wcD66az6A48osLOvEZFpQibONVOr2KctGMJlPOntSdMJ0aU44qFx1MDAwMrgyUveYaFx1MDAxNJmcXCKt79ozz/lz0kYhI+ZmxFx1MDAwMoGBOGmEsO1cdTAwMWbpYickSYPklLq2XHUwMDFjgaxcdTAwMTVIclx1MDAwMjxAw/4zNNHmXHUwMDAyOenO0bF0lawolqCMiTRngFx1MDAxY4jCXHUwMDBlWYs8tSe42oYjurLgNTtiXHUwMDAyObBcdTAwMDHTXHUwMDE1SbWaZTNKMlx1MDAxNUMuRrRvXHUwMDAxbNk1vOKmNFxcnWT5ILs+1oK5XHUwMDFhmzC+WMCpXHJ5XFyKZEi2QWylyzqxLN0gXHUwMDEwdFx0vCRcdTAwMGJIl1xcI1x1MDAxMiuGy+NcdTAwMGKW2bK3RlwiVlx1MDAxMDrNUSGrrVx1MDAxNZeGaEhcdTAwMWbtXHUwMDEycUE2voCMPdLtWZjVkmFcdTAwMDOS51JcdTAwMTO4tTvkSDskQpZcdTAwMTBaPFsyQ5eIg1x1MDAwMUx7pE1aXGZalVx1MDAxN8hcdTAwMDPBRlx1MDAxOK7dXHUwMDE3KV7kemZJ0mqqWN7RlYmGmU2ewEGqXHUwMDEyeaTz4m5cdTAwMTGjuGaiKlx1MDAwZokhgWzMXHUwMDAxdFx1MDAwMdTTsTHAWVHygIRsXzDbi5JcdTAwMGJ+LTGKscBcdLOcqtIqaNg3r1VWXeIySKPT9Fx1MDAwMM5OybNzLIqmXHJMPvpcZnarXHUwMDEwXHUwMDA0XG48M5h5XzBy6tjy4Vx1MDAxMjuidaPJMcZcdNDKVS3wvLFgmVx1MDAxZFkzXHL3WHJcIlx1MDAxNklSNraAvJ6nz5Isrej4J/gpTr5OXHR81lx1MDAwNk9cZlx1MDAwNWxWWrbISiZIuKuD21xySWaRcf9cdTAwMTHuLbjbTZDwoGQ9aKKeYdmLJLjcalZcdTAwMTXHplx1MDAwNDcv4I7ZnihcdTAwMTCXxm5cdTAwMDJcdTAwMTG6dKv5XHUwMDFhaFaphCfExZdcZlx1MDAxYlm25oh6TTyq0WY3S6b4XHUwMDA02pPkuyiZ+MBcdTAwMDc9eeM0XHUwMDE53LN7XHJcXP2ruKmF9K0l8UXgXCKTmJaCiyqniGNcdTAwMDXSkFxunnbYXHUwMDE1IJRcZlx1MDAwN/FYxGDPSGSQJ5dWXHUwMDAwQqDgel0u5SyQh8tcIqedYnRsMnGkMufiUUHsfcGCM1x1MDAwNHsygVx1MDAxYki8Qo7PqjhDbLVOPph90lx1MDAwMnFcdTAwMWNuXHUwMDEw3GxAXoW8m05cdTAwMDZ4UlLhlmXZSEW/aLnKqVY0XHUwMDFmzo2BjFx1MDAxY2WatcsvjvFcdTAwMTVOoPQlXHUwMDFikVx1MDAxNXnR+eJcdTAwMTRX8tgqgVx1MDAwNC1ccsx95DhcYkHvJb10RE5Gc3Mo11wiq2pnXHUwMDFlL1ZwjS+JX8mEVDRcdTAwMDChaNY11ZUsrnmfyifQeaKu9CXjiym/S8LY0sjmPXAsSFx1MDAwZS9cdTAwMTPinljyWnFp1Vx1MDAxY1x1MDAwMlx1MDAwNkaXUXP2Oju0XFxEK7hcdTAwMDHNcu6qQFx1MDAxZWdcclx1MDAwMyk7OI7lq5RcZoifYaFcdTAwMTB1w7CQy7Ykxyd1XHUwMDAzo7CAXHUwMDFm4MrrqjzOZqXJRVx1MDAwZVx1MDAwZseicVx1MDAwNVxcXHUwMDE0XHRcdTAwMTc5NSdcdTAwMDOnWapcdTAwMTKRf0CdiHSCtseSgVx1MDAwNb5XwYlm7l3weVx1MDAwZizBWVxiTPNcXKNewPNcdTAwMGbFXHUwMDBmNrXmXHUwMDEwXHUwMDAzZ30hOFvJ+lxy9z97TudcdTAwMTRcXJ5NO1x1MDAxY7jQXG4nStp8woWsnVx1MDAwZkS3sqjXT8JcdTAwMWZcdTAwMGKRaV+KyyYs6ZRoxTzHl0qGXHUwMDAx2OZcdTAwMTL0gq5NXHUwMDFlXFxcdTAwMTXHrVx1MDAwM6lKXHUwMDEwubq4pM7PKlx1MDAxNz5cdTAwMWE1O1x1MDAxMSGb9UBcdTAwMTjJ2WgurYBbrldcdTAwMTfIgyD2+zlcdTAwMDbP3u/bXCJkXlx1MDAxZqykSbaUdFx1MDAxMFnTXHUwMDBm3lxmp0yTw1hcdTAwMTJcdTAwMTVZIFx1MDAwZjdLXHUwMDEwXHUwMDE4U2L2bKq5XHUwMDA1XHUwMDFlLlfHXG6WTKKuN1fkXHUwMDEzY3VcIrBQaDncX5XHNc14UZJL3MncVi+PuyVIXHUwMDBmQfJjXHUwMDE5XFwmT5LShzlW2r1cXFx1MDAxZv9wpJ/1kzRoglx1MDAwNyWyXFwvXHUwMDE40m2zmUPkYT1jm0jUe+whcVuzzIeXaMxcdTAwMTJcdTAwMWZMXCJcdTAwMTGAiSlcdTAwMTBIUlx1MDAxZsO1LYhcdTAwMGVcdTAwMWTcZiaQfUFJmC9DfFtPSTBcdTAwMTRdod6zLUy6U1x1MDAwNfPpXHUwMDEztV0hpbf3P3+9MFv353HjxF9vju1PXGZ7V2iwbVx1MDAwM9mFvXdXyLFiqjtcdTAwMDagXHUwMDA36Vxu0XTD7jx9/U9P6PF7/3BPKE3AcnNcdTAwMTOpK43vKlx1MDAwNMJCJVx1MDAxMCXyXHUwMDAzW7AqrU3MTVxmJ0tpzFRk3may7CxcdTAwMWFPYj1tXHUwMDBixuza7OHG00qy71x1MDAxZW3eZGI9jCU2/K/iOulcdTAwMDKJZFx1MDAxY/Lc8idk5DqnisRE0m5cdTAwMTLTPVx1MDAxNztcdTAwMTct4mEx3HPG1SW0ZiZPXHUwMDE5dlx1MDAxMJBDcWWkKqjy4Fx1MDAxMlxiqSBZiGG7ReZXaCxPJLHxyFlKnqJMbJikUFx1MDAxMIRDmK5GgSN3XHUwMDEyXHUwMDE39Vx1MDAxMM/uXHUwMDBimFx1MDAxMVx1MDAxMm9cdTAwMWHcXHUwMDE01y8kxFPeXHUwMDExSulcdTAwMTk7XGK48TLKMlx1MDAwNtVcdTAwMWMnJ8y3e+VcdTAwMTKrx4JcZnNQVF/CXHUwMDFhwo3vhptpiMuFUJUvmmIrXHUwMDBi74Q8SMyAS1x1MDAwMNmKtFx1MDAxNo6YXHUwMDE4+Gjvc1xuL1x1MDAxNlu5XHUwMDBmXHUwMDAyWmpKXHUwMDEyXHUwMDE3lVx1MDAxMjXENYaYWJFccvQkXHUwMDA2Klx1MDAxZT7h273Eosw0oSe5lEvmy/bIqsbGXHKhoqqIIIskwlx0/WbwQkJcdTAwMDbgJz5cdTAwMWRcdTAwMGYuJFx1MDAxNmHutyzIhFx1MDAxMFxcc1x1MDAwMIdCXHK5jrpcdTAwMDSynIZPcPmrLWhlaFx1MDAwMieQh5PNMZJpMH8j3PfFKFTYtLegpFx1MDAwMMTRclwin41cdTAwMTeui/TNKG7R5KpPgsFcbspThvErjVxyrkMqmTN2452weFx1MDAxNmWKLmXBUIpptGFmmlx1MDAxNVx1MDAwM7JcdTAwMDLmKoNcdTAwMTheurSPybOyVCvQXCKXpDHkfkPJ9kKu1IZcdTAwMDV2XHUwMDA24cxOXHUwMDBiXHUwMDFh2ky4SW9CLDrLvV2kZZ5cdTAwMDRFJuXrTlx1MDAxNDBksYzHX85cdTAwMTRcdTAwMGJmrHsjL7d2R/LdSaTtRdVbkcpy0GiVN9RcdTAwMTKuXGZcdTAwMTlW4FxuVm6lKFx1MDAxMEd2XHUwMDFhw06mIG9lblx0XHUwMDE1XHUwMDA3XGZcdTAwMDLJXHUwMDFimXqUXHUwMDExXG5pXHUwMDAyXHUwMDAyuTVccklK11wiXHUwMDEzgcQ6wCHKRHdSUMHlxmCyXHUwMDA2QGlZXHUwMDAxz50y9EST/tLTXHUwMDFhyYJWO1x0mVxmR/o5dI3EJ1x1MDAwZlx1MDAxY7j8lyBoXHUwMDAy0oUoILH2XHLNvZlpLVxuwXJ5j1NozYpcZlcvXHUwMDEz+lvAeuRcdTAwMWJcXMwtXGZcdTAwMWNUYDu4mlx1MDAxMSGUpUPkNFMgy19cdTAwMTGnmuOAXHUwMDFmK+uMl7JcdTAwMDZcIlx1MDAxMZ8wWEzZidYs4cii/cBnRXv7UsVUI0lFgoNcdTAwMWNQpcmekoFcdTAwMTfPXHLikrxuQnJMOUt6U+dcdTAwMTPRXHUwMDA3V1x1MDAwNZr6XU51l8flevBxklx1MDAwMFx0o3y9XHUwMDA29n18MIIwLlxcXHUwMDBmQ5tg6lx1MDAxMeB93y5hXHUwMDFiIfF4sLKhXG6GP/qrX1x1MDAxYbols4ZEJFx1MDAxMWxRt7TP8dBccnh6uHqy+lx1MDAxOdqZN51e3WBhXHUwMDAyvsWlUauiXlNcdTAwMWbjQnYxybkjS1xiSixcdTAwMTLXx/iRXHUwMDAyimud+T3oZSyY4exnmzlcdTAwMTBcdTAwMWHodUnFw1mXt3lcdTAwMGXDXHKa9JZ4v6RvLkFO9PFstkHCXHUwMDEyuFxyn/Y6yoKhsr6ul7RRqXuFtJoqU68ofUODtJmYcCFGYG+NWyyHuVxc4t+Holx1MDAxN0BE+oVVluS85GTj+IcpYWTqXHUwMDFm9uUtyVwibl4uXCJVcKuWk1x1MDAxNDKXN+D1qcRcYuJcYublqldj81x1MDAwNsJgXHUwMDBmTyXwXG6yXHUwMDE1XHUwMDE56Fx1MDAxMIJ3b3ixnP5cdTAwMTJEQzguVCcjw9uUTnLtYGRcdTAwMDaDVIBJx1x1MDAxYs9cdTAwMDTZu9iLUDhhjkjU+LYzS/YuMl2TXHUwMDE2mKPa2rzNpFx1MDAxMFx1MDAxMkY9SF1YzvznbGCDWjxBfs1EXskhQ5ftg1x1MDAxZtxcIpPmXHUwMDFkXHUwMDFlIbi0UlhVi1x1MDAwN4P7XHUwMDBiwZk38sh6elNBXHUwMDEytre5s5yLSeYollx1MDAwMd0tokNDlkZcdTAwMTbUkfwwXHUwMDEzzdjAXHUwMDA2jVx1MDAwN4iW5pCP4lx1MDAxYVx1MDAxNDpdXZU3YLSSXHUwMDE2XG4wfU5Oklx1MDAwMViG7lx1MDAxYTSa4iuJaf0kTj5RfOpt0Vx1MDAxZct2MMucMvJcdTAwMWNyrXZcdTAwMTNcdTAwMTGMcmjQkblcXFx1MDAxM4lTa2O4XHKBXHUwMDEz/ZK0OZEkfFx1MDAxOduWJz1cYnFAJP62JVx1MDAwMjlcboJHnfZtyswmiHZdg71Lwu5cblxi5IaiwaHzrz41OIynXHUwMDBiXG7PhqC2wfH1cG/BTDf38Vx1MDAxMM4u1mZO5jbl0uSwNziqy/me21x1MDAwNi/t5lx1MDAwYtl1XHLa33CuKbZ1d38jXHUwMDEyKu/YS4Xp7fCFz+2Nh0+QXHUwMDFmXHUwMDFldlDZjvmbdntcdTAwMDO5szVcdTAwMDR7Pn3j5f6GW/Rf52/UbnPkdutg93TrfGpsZuVPf+P5XHUwMDFm73tq04YoRmysXHUwMDE4XHUwMDA3y2ZrXHUwMDBlxVZcdTAwMDTnsXaNkF5cdTAwMTNcdTAwMDFUIFNcdTAwMTN0wSFwUojqbPlcdTAwMDe3XHUwMDEzXHUwMDExmKmhJoTqXHUwMDE1UFxicfKRUHDNIVnkXHUwMDE0ebmM3XGbWCc4XHUwMDFho0ro30mPSPxRUleicrsw7Vxmr6Rkr85cdTAwMTdcdTAwMTHrcGmZQcyYgFx0QnVtXHJAyiY9sVxiXHUwMDA2/6OLZl5cYo2CIWefm+yzuUSTXHUwMDE2XHUwMDFhsCzOOeBcInoxuGTFJSkwKWnnciZcdTAwMTF+TWpcdTAwMGXu+ERcdTAwMTNfco3Zerq8I5GtpyvCeWm+TVx1MDAwNKEkyM7377DHwVx0LUFT5Fx1MDAwYkhEUm1cdTAwMTaRXHUwMDEy52e0gui8XHUwMDE2TNgmw1RcdTAwMTbiZMFrYb2cc1x1MDAxMFxcuy1II9e151x1MDAwNVx1MDAxN1xiU1x1MDAxOahWjFlcbiRcIv1cImeutCSocKKr/O1cdTAwMThRcMmyoEbWXG7UXHLOhqfBITIm6LzFQTZcdTAwMDX1wJtObpJcdTAwMDKBzFxyuKqbXHUwMDEzUYiau/aycEOIj5pcdTAwMDRcdTAwMTeIfktIrYJK8UhaXHUwMDFlXHUwMDE1dF5QxyP2iaaXXHUwMDFizkJcdIqUXHUwMDFkXHUwMDE4KbmzMu3GyOXh1zF3IOjaXHUwMDE1bEswsFx1MDAwZuRcdTAwMWSOyItcdTAwMTT3XHUwMDE45PLIhatcdTAwMTO1SkKn1lxuJJm3TnPYSFx1MDAwNGK+pVx1MDAwNO+EuEZriZVMdC1cdTAwMDVcdTAwMDK5lZKrOmPMuWlTy0QyXFxccskpl01DXGLJXHUwMDAxc4KfuNClq80mmaQyQ4jalMCEXHUwMDFkubpEml3jXHUwMDFhje5b5mQg96untUlcdTAwMDWTj65cdTAwMTG4W0mR+4tJTG5cdTAwMTlcdTAwMTKlXHUwMDBmR7JIsiuLXG64SFKIn2c9SPiuxZV4vYYjjMW37NnwdWzpXHUwMDBiulx1MDAxNtnV5Vx1MDAxNlxcWODTtttcdTAwMTLH55HJRzLJP9Cs51OPeHysnijDhWWqoNNcdTAwMTZcdTAwMWGCXHUwMDBiXGZYXHUwMDA1Melhdblm8j1wXHUwMDFkkS7pfYZGXHUwMDFhpKAlxnVcdTAwMDaXX59kOSstoCVjviuYtlxivFx1MDAwNPiJXHUwMDE375g5XHUwMDFk5yyiXCLtXHLXtta/49BwXHUwMDFlXG7NWoP2+OFcZvbF/efcroK3JdhcIiuQ51NcdTAwMGVcdTAwMThcdHtE1JT3JFx1MDAxMEJxXHUwMDFhg1x1MDAwNGek6SqQh7hcdTAwMGLHPlx1MDAxMkhcIjNvXCJcdTAwMWKOmFxy3WaG41xuxVx1MDAxMnlB+rRcdTAwMTGsTWFWTcs5XGJmSX6B/4iC5XVcdTAwMTDnfHvfXHUwMDExadYymCXrlFx1MDAxNtrMOdqCslx1MDAxMIQpMookkp2YkatxXGZJszFLXGY8XCLzklsleU2aZOXCZ511JDhhY1x1MDAwMlx1MDAxOS6EK1kx19ZcdTAwMTSfIMhOZqqnXHUwMDFiNnGzP65cdTAwMTMwJWfNWs5cdTAwMDdcbq6rUzFcdTAwMWJqXG5EQeCyNVfd6IL+S2jQz3ApIVx1MDAwYmoqq/hJUkBI7saQPlx1MDAxNJ0zqC+Xu1x1MDAxMEYpQ9W/XHUwMDE5Ylxm2KPD+0XkVm/3QiPtRIQ3NFx1MDAxY8JTWVx1MDAwYoFTNOYxpixp+5GQXHUwMDA0ZyHwMFx1MDAxMdJRXHUwMDE1x5VcdTAwMDBEpJDmVZScMc9lRNxsSOdL+F2+KlwisuWmXHUwMDA0QTqmgGJcdTAwMTZmXiFcdTAwMTWBLnPmNCPNsWT0YYElXCLCXCLouUBcXFx1MDAxYb+nXHUwMDFlwChcdTAwMDefUUpymFxyZoWbfCWNS4E84Tk6yPiYXHUwMDE1ta55XHUwMDFmbmPhWLtnLFI0d8lcYlx1MDAxNI+dTDJSZJNcYuRcdTAwMDVgjS8mXo6SKTNLYlx1MDAwMPpcdTAwMDVcdTAwMWXa6rF1XHLGhI6ra1x1MDAxNcI4UVx1MDAxMO1yqIcxXHUwMDEz1/uRXHUwMDFjMVx1MDAxYryAqVx1MDAwYtFcdTAwMTDqj1dWQOrHOTPBXHUwMDExXHUwMDA0XHUwMDAy1lxcxujHuZVAXHUwMDAwMVuXtkBV8LRcdTAwMTXXYnNMj9xPmTREXHUwMDE4yKwj5364XqQk6PNcXKJcbvesjbMxm/exaTOOJ25bXHUwMDE1UFx1MDAxMbMrkpphpCSIhGZXxTmSXHUwMDAx4FjjRFx1MDAxM75UIE+kXHUwMDE5Z8epWdZcdTAwMWKr4jxcdTAwMTNcdTAwMTLyLnHlRIFcdTAwMWVcdTAwMWKC3slTxq1GRNZm4micyKvBgKFcdTAwMDCZxm6dJd5SpNmjkCtcbimw0qRcdTAwMTdcdTAwMTKEkinYvilcdTAwMDfOjGDRX3FojXOrRbsqOd5Pclx1MDAwZjK2+ZDfLumddYKNXHUwMDE0rFHS5Crl/C2xU4ljNFx1MDAxMydIl6iFSqW9krSXS1hcdTAwMDSnXFxZnFfa5KqnXCLJjpFlISYoQuHBQlx08ru7rJ5Dllqb+lx1MDAxZnhLJFxuqZXFqlx1MDAwMF4o16Ux3cnoQVx1MDAxYzldNSlcZsjpVdL/Q+hP4tjI5SNkXHUwMDE2zMThtSou0OK+q1iAY2HgT6hcdTAwMWVyIE5cdTAwMThcdTAwMTiTOVxmz43D4fF2XHUwMDBigDZcIvHkwmRcdTAwMDQ2h/C0soaiSfO+liu8aOhcdTAwMGLkIVIhxa+zlsYl7z2LXHUwMDA0LNVtRFWBRyP5XHUwMDAwJ31ghNJcdTAwMDZilYVcdTAwMTfcvKtYXHUwMDFlXHRp/3yBPIEzXHR3K4mLVGmHXFxVXCJcIvK0+sUlttqCeSTJvSmk48TFUTVyRkMuflx1MDAxNPFcdTAwMDGwX5/68Y45uMaojoFnNk/I8JFNI8V9ojbWc+iQx4yrXHUwMDAwXHUwMDEw6LCzXHUwMDE0TN7/I6aNyVx1MDAwMedcdTAwMDZcblx1MDAxNiqx4UlcdTAwMTI/rlRlgVLmXHUwMDAzU4mIgcwlktRU9eJsWoNIuGjkJGLGOj9gmoGri6nAXHUwMDBi2yxcdTAwMTHgVsFFkj6UXHUwMDE0wJJ7kG3JtFx1MDAxNKmgybbDQlx1MDAwYoecquLIhlx1MDAwYoUyid2hfsyeJE24RZO2XHTIzOlcdTAwMTJpiJOjXHUwMDExR9MlXHUwMDE3bFx1MDAxYWPnj1x1MDAxY9iOx0NcdTAwMTmfISn4LFx1MDAxMFx1MDAxOHGshVx1MDAwYl5jPZRiXGI6dVx1MDAxZHNGWaNOkZBcdD6yvE8nTuemx7+pneVP37cnb47Wm0vT5uuw9+lcdTAwMTQreMTrckmy0VmjzrNcdTAwMTTCcUTCJ57LTK/s021vb3c36XSDTFx1MDAwZqy0MJa0XHUwMDFkXHUwMDEzh89tOs0pPYZLPFx1MDAxNaGD3+xpXG5cdOmFSyiGp++83Ke7Pb9fnthZ+by5cTo/XHUwMDEyLr5/WzhcdTAwMWPZ+dOne/7HO59ZgiV15Fx1MDAxMj0uIVTSZGUswc17/Fx1MDAwNEwok6F66lKu8/Jw+lxc9cAtj/lcdTAwMDJkoonJrcw1IJJcdTAwMGLGSjxMIFQqeHbBsvKsIJ9cdTAwMWGx01xu4lxmm09cdTAwMDU+xnGrmkk9rkSbU1x1MDAxNVxib8CVrFx1MDAxYye13EpWL4/4XHUwMDE3ncbcI7c8ZmaXg8Qp21x1MDAxMNxcIlx1MDAxN+vrXG6ShpxFeLJcdTAwMTSziZRv6yFcdTAwMTUvojouu2ZcdTAwMDZTIFAziiB7X7prl3GXXHUwMDEybqzhacjWTqr/enmGVFIs9noyn/nsXHR6LuKNpLz3XFy0V8BPy4acSFxiXHUwMDEymFxuZbLqLFx0dZw1XFxTXHTFqXf7skEmY+FSZ5nDcFx1MDAxOUSHuYGwXHUwMDA0QFx1MDAxMVFYX4+WhDwmhFx1MDAxZFx1MDAxOeC1yGqz5HmypHqBw46yfjqqvcOaXG5G2mJkXvn+P05cYjn/XHUwMDE0NFx1MDAxN8jj4nOrObOsOGaWhSWeW+otZ3tcdTAwMTBJXHUwMDE23C15jFx1MDAxMHUwyGFcdTAwMWWVbyZyXHQ85pJOm1x1MDAxMm5fVlx1MDAwM0OilMExsSG7PG64SoRcdTAwMTlcdTAwMWPR9/VxXHUwMDBlXHUwMDFmX0TuS7JMcu/LfKaeJVx1MDAwMsJcbohcdTAwMWYruTzHhX2ac4lcdO2XVY+5IIK0XGak5vZcdTAwMDWs4am2XHUwMDFlOdiW4KJaZHB7tqyh6rBlXFziWqAsXFz+Lbk9XGK6SpBaVZwjXHUwMDFiXG5J/MhQZutLPZzpJ7FcdTAwMWLX7+LRhZDTkHtiwFx1MDAxZojaXG54XHUwMDEwXHUwMDEztyNzXHT6UuNcXH59kXxcdTAwMTNQaG5oVVx1MDAwNZUtTku6tt6xzpCnOyx8OLa5LEdIS1ZLXHUwMDE4nDLmXHUwMDBi5JbL4Jj0+6Q3YFx1MDAxOV3IXHUwMDAyxePidHhMXHUwMDA2RFrk+6FcYtCLxFx1MDAwZlx1MDAxOJMg4PV+gyFcdTAwMTVdbyBhvTPZrbL6yDCeXHUwMDE4LFtAdcJZXCJcdTAwMTJEKtZzQjdffcJTcltFuylZL86mMUGSuNls/ZJusMnP+THObJTQQpB/iGuEXHUwMDE5QEpcdTAwMWTyroXhbFx1MDAwNXy8J8NJ/aHghtLAXHUwMDAzyVEnLlWxeVbMp0b8Udp9MCBcdTAwMTd3Vzhb99NtXG5fLoRXXHUwMDA0d3MxT747bMDrIdiJXHUwMDA1XFwuNWpvr1NvemCsxFhcdTAwMDfjhrCHXHUwMDFlW+ZdqMHe5yO1LyevXHSXzDhcdTAwMWRcdTAwMDfWNVx1MDAxNp7YreLWY1KD6Px9XHUwMDBlelx1MDAxNlxicmJccoakf+2y61x1MDAxYlx1MDAwZmuqtVx1MDAxMbqvXHUwMDE511x1MDAxOJ9vqlx1MDAxONCUXHUwMDEwMsV9zJZ7dFmdXHUwMDEzeVx1MDAxZGYwO0fUXHUwMDE2J7STW9Rpy8XbzDBLle2V6oyFkVx1MDAwMmT93kHdXHUwMDA0x9y5soA9XCJEULjfTOCgfoy4XGboXHUwMDE46154glx1MDAxY1xc7uohXHUwMDBm5GfT1Dy3yHqOJjJcXMqA7IPGXHUwMDAxXHUwMDE0iNhdcjGVod9+W5iSdnhy8onL7qXWOfPPoFFcdTAwMTRr26TEYrmSa8xkzFd0XGZcdTAwMTjmtZeMcq6fwVx1MDAwMMl98ihUeYJcdTAwMDdcdTAwMDTpNmVRsTwwz4G6aLImqpjFjVxcvsLFXypKUkBcdTAwMTVdINfeXHUwMDExyVx1MDAxZdOizDyMp6GAXHUwMDE1XCK1mC16wSnRSVxcVSFcdTAwMTBcdTAwMWGRp1x1MDAxOSzNO09WoChcbiahZKLCTFx1MDAxNXHuvsuyNDxdMoRxg5gnnKvoXGIzK+ZIP+FcdTAwMWU+x6iwsI1cdTAwMDRDtveMl7RDXGYhXFycrmIxx5osMXXclWPTKKcjsKTIXG5yXHUwMDA3ILI7QbYl0ZXpkpyaka/ghHnRI8RccqnUq4FfglHOh4+TyVJWksJNXHUwMDE25LrJk3BnXG6OMJtaNtskolx1MDAwMpF1XHUwMDFhOSBsgy1cdTAwMDBccvBFXCJuYaaGgDRme3tcdTAwMDTdjGVXklx1MDAxZuK6nZIpIVhpuEXlXHUwMDAzX1xyrjUraJBcIotcdTAwMDT3lvT4oYBiVbR3JZFTXHUwMDFh91x1MDAwZZOcXHUwMDE3cTggzTE1JtmcnyyLZ1x1MDAwMnmq08yXzC5RJHpcdTAwMTSvjbDpXHUwMDAwXHUwMDE2aHeKubhajFxykFRCz1x1MDAwYkO0/OwtXHUwMDExI0bEc30l511Kbf/V+d9eXHUwMDA179bh4d7pxcs1b59/8bHm7VMp2DxcdTAwMWKu2pr35PTYXHUwMDE3tzVu/c3V+eL91/njn9+uToa+5p1a+pZcdTAwMDVvMutn5FtGZJfyVMC+PG9cdTAwMWVfnDbPW8eXryh0k0qIqFx1MDAxZi5cdTAwMWHk+EDHQvunQnefzzxUuskvyVSzrtC9vHY/fVx1MDAxNWc+bc7N7I9Pzuqj/bul/X+u0N1XV3uOUT1XXrq3XHUwMDA3cVx1MDAwNZxyspwn7suGXHUwMDFhWV1Y+3I5vj3zfeWnOd1dnzhcdTAwMTh2VTWWPTxSX9non4EkXHUwMDBmNHFcYuMl2YNcdTAwMDJcdTAwMTfd+mekxPv2Z6yBt5NcdTAwMWNg8UqrXHUwMDE3tPYhnyXWyjBcdTAwMDPQ3f1cdTAwMTlEKEjklKlT28uT49VcdTAwMWbX38dcdTAwMGb2J6Yu5ffxi6C+zP7pzzz/431dzMhDXHUwMDA3htV7Llx1MDAxMFx1MDAxN+RYzZw7XHUwMDBiIZbUYVxc5O2LWN3Yg7FEcqWBTS8yke1ajSTVXHUwMDBiXHUwMDA3XHUwMDE1Spx7asLw0HNcdTAwMWVcdTAwMWSZXFw2I9quJOmESmX0XeLcXHUwMDE5vyG8Vlx1MDAwZXG+dlwi53whOVx1MDAxNiffSYrri3iAOSiFo8ickY2uLI5LtTjJtE/ziZfESKmxw+ONUDdtlczCf1x1MDAxNlx1MDAwYlmPk4xcdTAwMGJcdTAwMGJyeEan3HzAqzBEXHUwMDE4q0xiqmXi0jmej1xcuWhcdTAwMWOdUakgWJPhelx1MDAxN1xmPNVaiW7hYFx1MDAwMcKkXHUwMDAyialZxK6A5u7LkKWhLFx1MDAwNnPRMEe9lS66xJREkVx1MDAwN1xiXHUwMDExLMdyqlx1MDAwMlO1motYuae56Fx1MDAwMlO3yFxiguiQuNqsWdOuplx1MDAwN2L8XHUwMDEydL9W4EO7SEkuPFx1MDAxNfkq8IdqP1x1MDAxYpTE34SCXHUwMDA04LFhxN2dXHQ1nMljN1x1MDAwMkdcYoklgaclXHUwMDE3mFx1MDAxYUZcdIdDgjyf92vYLeHdXHUwMDEy5Vx1MDAxZFxutj88dozIROFj1z6U1M1J/UTSu1x1MDAxNUx5PTaUgveJ9SZkTzD/boHAVO2QJH5cIqHlm6/wsVx1MDAxYcN+JifZw1x1MDAxYp/gQ7WIXHJ1XHUwMDBlw2Tb6F/xjvNyVi5vUFx1MDAxZHyot3FoLT1C4994Slx1MDAxZSqCXHUwMDFjUyVVuMlrIYNcdTAwMWXjvGKZm8KB7cxDSZWbXHUwMDFiWKvRb7SDecVXZiozsKlul6SZq3Jlhc81ZmBn8lAz56SOZFE9S45cdTAwMDd2d1x1MDAwZjV9p7mwXHUwMDFisWRcdTAwMGUuXHUwMDFi2CG3e1x1MDAwZSzuxIRSzeRcclx1MDAxYzLkPZF8Je2gQc1D04bF3nat6K1xVztcZqfS4v1cdTAwMTFsM1go2Pd6Rlx1MDAxZS4oXHUwMDEyXHUwMDA0wz3IXHUwMDA19dW+XHUwMDBmbKT9xDhHQNJg61x1MDAwYoa2+77Rh0VcdTAwMTHE7HqRyOHfqnMjj1xyT7IzXHUwMDExXHUwMDEwXFww3Nr3VIy0j1x1MDAwNSuSIV1oPdqp/7FcdTAwMWR57Fx1MDAxOFx1MDAxM0WOULuELbi/YVx1MDAxOXmwLJpcdTAwMGLYONFd0MnpZ/lGXHUwMDFlTFx1MDAxZo2pxM2XLWDpZ5pHXHUwMDFlXHUwMDAxXHUwMDAxvk1/ULTrsZ/vXHUwMDE4eUQs4PiSscRcdTAwMTSMyPV3byNcdTAwMGb+jc0oyTVMXHUwMDA1/di+XHUwMDBleKTtgZGkOIKUXG7WSddEXGIjXHUwMDBmIVx1MDAwMunuXGbHUutXmvePYUZcdTAwMWVBM44tXHUwMDA0p21Zg6hPlDXyXHUwMDEwZlx07npUhqPRb1xmXHUwMDA0XHUwMDFmv+1DWrSEw1RcdTAwMTL7XCKPtSRMsImiKOb8r1x1MDAxZf5NXHUwMDEzNc82V9Elsuf6uDvQONt1iZzaN5Jjuml2rUBcIlx1MDAwN99cdTAwMDNtMtRDZ1x1MDAwYsZSz4dcdTAwMWHIjlx1MDAxOVx1MDAwN+uKplJSXHUwMDAyn9Ylabak85t2XGaLmP9cdTAwMTD3bkpYwdivsZqLQFx1MDAxY1x1MDAwM92c9Fx1MDAxNpmZ5bY6MtWThapAXCJcdTAwMWNRen5MZU33zlo8XGJE0pq4NOlLpmhcdTAwMDUn1Fx1MDAxY9ep0u2a7lx1MDAxOXg2XHUwMDEwcONIdnHXuozdnuze5M9LTF3dXG7Omlx1MDAxOWlYOVxuo2xcdTAwMTlFjdKpgYwszHJvXFx+lTRvZJXn65ayrMzAXHUwMDE2O7s3hFx1MDAwYpgqXHUwMDFibFqJ7HlkWCOSXHUwMDFjXHUwMDE5KJBIV+o43axcdTAwMTKjb7dcdTAwMTckv1x1MDAwN7XLtbdcdTAwMTlcdTAwMTaITDMgZOmAO8CTlLlIx9NcdFx1MDAwM0k6XHUwMDE0mt1cdTAwMTKRsr1o9NH85MtcdTAwMDdcZnu5XFz7Q1J4XTS+IVx1MDAwNPefXHUwMDE5JktU5qjyy9TI8Vxm8Vx1MDAxZIJTtvVqyavkhmjDmldImOeuuIxTayR05KShqVx1MDAxZk9cdTAwMWOSJpTJv/g0eMGd3VxmyVx1MDAwNlhcdTAwMDFzN7q/PnU1d//l8uBs/uZ0xI9dzVxme2lfcXiN7JkuoVx1MDAwZp6++7hcdTAwMDFGcZ1cdTAwMDY5I8jm6bNcdTAwMGJ7p57UQ+VekkmEcNKnXHUwMDBm5LX97k88XHUwMDEypKWtXFy+gznt39yPUr2UllFcdTAwMDXnXHUwMDE3fPm40I0/PFxcXHUwMDFlO9qcXVlcdTAwMTJNv/71aGtm937YldboXHUwMDA2o1CWRsh/7V+ptf98Q0pz/SDr4DV6a272NkZO1lfl6PZW68vB7N786PLhn4bU8z/e192MdFx1MDAxNT7yWZLUr3qqbEZfsFm1q9Tw0shcdTAwMTBnclx1MDAxMCZcdTAwMTO+Wlx1MDAxMn5m5aOQSfTtXHUwMDE1XHRtjlx1MDAxZVWA9eqqNVRcdTAwMDVcdTAwMGU6M9RdasiuMG9W1VxuzEuE+dBQalYhXWAmxFixaPFotdSQYXZSs8pxXVBEnl1E6lcts+aDV3mvqkBgVmrIenqpVfVcdTAwMTDcc5KmQGBeaqhcbmSrXG7xK4J3kUDAXHUwMDA1XHUwMDAyU6VcdTAwMDHJJ5JcYmd89pZTq4pcdTAwMTP6uFBcdTAwMTNcdTAwMGJw0nmhQeVlYraqSJNB3m9ZQL/Q3YuoXG6stqqKULnVOkNV3KCjTd1VhrxRUe1UlbyRVGQgZZ7jsqaXUK+DVSD6X2Cqoeh0SMj99MYnmFx1MDAxNXlKdrn3f8PtOpQjQzdC3VjCXHUwMDAy2V9cdTAwMDdfXHUwMDAzvO5zRlx1MDAxZSp5MVxy4KmSfTv9z/CrkOv9rMyroPX97OBrsP/9XGb1a2ZcdTAwMTP6uZKH2Vx0laotZEB9o697KMlcdTAwMTNKgFx1MDAxYz6oglxudF9nnDdccurvt3+08IrZmH7hzGtGd/qGXFztvlx1MDAxMFx0MTggSFx1MDAxY/BAIV93LF774+3r8WnemYR2+eDawNeTP7Co3/TE3vd9PihcdTAwMWLZXHUwMDAwSSGSTf9cdTAwMGWsbd2t17dcdTAwMWSGvMXk7JtcdTAwMGXrgy2xXHSOrTI6wFdMTL6rpXuwxMTNs6xcdTAwMWa6tn1cdTAwMGY8a5rBXHUwMDEy3uYpumFcdTAwMTNv8mRdfvZNbraro/S2KOAhSlx0ZG4nuUDO0zNglNKN2XlbXHUwMDE01dVpylBgg4Z5JFx1MDAxYyeuQXPsQVx1MDAxMyybhaFMNMhcdTAwMWb/0EUtkYfDmth6yFx1MDAxZp1z/yReWWhJjDyJuuR1XHUwMDE4zlx1MDAxM6Y+L8ntMviNXCIhXHUwMDA3XHRGXHUwMDEzK0OJXHUwMDE5cNx87dOuMu5L6tpKormx3idcdTAwMDUoWLknqfyRq/FghZBcIueMXHUwMDExnNEkibEkhV4wJUeNs27ciIMkNHRlu1x1MDAxY+XjsyX7Js1VgSVI209ccpxcdTAwMTkneXzOkEFdSetcdTAwMDdULMhMSbjBjUEhqjZPWSbOXHUwMDFh7vtFXHUwMDEyKeFcdTAwMDFkfYlcdTAwMDRcdTAwMGY84tiyJ1x1MDAwM1PvczBP6vNxZI3PsMBcdTAwMDfBZ1x1MDAxODJRkjuEm3FiVs3g+Fx1MDAxOVxcj3hcdTAwMTiSqlc/kWZcdTAwMTMtbS7duLJ58YHWUEA3yWNcdTAwMTZcbvYoiGReuDXoYTVrhuYhXHUwMDExdlwiWiNRtarn9E3jz1BmPDw+864lNsjpiSVjn5ZupWigXHUwMDFkXHUwMDBmnNSEZLvVKp89XCK3XGbeXHUwMDA0+VFcdTAwMDJcdTAwMTdcdTAwMDJcdTAwMTc8Qo6Q49O09I68zXlhTVxuwX3TiJQ8p7lMfb9roNLeh3WSQv7Fp6I8V1x04Kh1dC3qivLny83PXHUwMDBi7nb6+nL2YmHLfTltfb5Rw16U157+S3Iwl3TKWSvJxFx1MDAwNonEPXud5OHsyeL1tlaS4jClxu/h9lx1MDAwYu38XHUwMDBiZfneXHUwMDFmeVx1MDAxY25cIk21eX6fL5fk909Wd5an9jdupvY+jyysbk1cdTAwMWaNzYvfrZUkereSvJSk6pXlU3jTcWdpbvVqfWVqYeGHWL9YXHUwMDFh+7xthl1ra5jndIOlXHUwMDFhST5cdTAwMWanO/zlP8U9x9KHY3+ga0dcdTAwMTR9LFwiR13bS7r4tH5ycDk3f3qx/2Uk3M6M/dzduvrTS3r+xzs7nP4kLo+zT0hcdTAwMDZcdTAwMDL37SFErI/jaohmRrr551xuXFx9b1x1MDAxZZyRbvq5ktCmXHUwMDBmTc/j5JPTOHRIXlx1MDAxMI5cdTAwMTRI7Eck9DT5xFxyfYZE+vWAnr5MR4+TTyqRepFcdK5cdTAwMWXe3o+H6XHuyZL53JLQoYRCrVx1MDAwZkvUXHUwMDBiY0/18vqxWI28ilwir1x1MDAwZs3WSFx1MDAxN0deQa2iXHUwMDFmXHUwMDBm2NPYUyRhkXJcdTAwMDV7wPrzlD2OPTHYpLxcdTAwMDJcXGJ/XCK17rGnXCKevN5Eb49zT4iWJa5cdTAwMGZcdTAwMTFzXHUwMDExUV5vJrrHuafIwpdkM/eNVHkv4F1LrpCAVdbDYJ2iyl9KtVx1MDAxMFLfaH5cdTAwMDSsXCJplMzVq+XGkZyGpqSMlOCqSKQ0WeUz8Per6PJcdTAwMTJaldumOJ6RgVlcdTAwMWbqXFzc/eyJ5S644Vx1MDAwNFbl6i+jYkZM9VxiXGZHhsp1Y7RGXHUwMDA1XHUwMDA3mYusucVcdTAwMTbpJnGTmcBXXHUwMDEw5mm8w8i+XHUwMDA1XHUwMDE5LfM1b+1cIiZXXHUwMDE1RZxcdTAwMTNXQphHmCp3XHUwMDE0sqicOaiHXHUwMDFhK6u1XHUwMDBlXHUwMDE5Rn1cdTAwMDf3XHUwMDAxolxuLYRtl6xEZ/JSXHSYblx1MDAwYsdIltC3JoAqN3JwmKFLXFxcdTAwMWGfiGQuUbZkkd8jlNSmXU1cYvhUJrBNPUZcdTAwMWUnrvYtWcBbXHUwMDA1klZXaYy8guqOXHUwMDE40kC8NLd8Z1x1MDAwN+6hmUE9J1x1MDAwM2m9Pj9cdTAwMDBIWWnTPi3pyJ9gm1uO+8ZYXHUwMDE0KLjC/Oez+Lnu5+vY7l5xSTV0d4M/tVx1MDAxYb67gd9qXHLh3SvUroby7nFSyahEp/x2yrtXXHUwMDFjtf6cd4Obglx1MDAxYdK7wW1VXHLr3SuMaX/au1dY+1x1MDAxYd67VzikXHUwMDFh4rvBPWZccvPdK3x6f+q7wYOO/tx3r4iKasjvXlx1MDAxMbj1Z797RWhZQ3/3iui3P//dK+LzXHUwMDFhXHUwMDAyvFekXHUwMDEwfVx1MDAxOfBekePUUOC9XCJccqvhwHtFplhDgveKZLaGXHUwMDA07zX5dn9cdTAwMTa811RcdTAwMDRqePBeU7WoIcJ7TWmlhlx07zX1n/5UeK+pUNVR4b2ukvYulb//6vzva5pHNv/iU1x1MDAxOT7Fnrpz2UhdXHUwMDE5Xlx1MDAxZo6Eg29nS0tfl8xcXPNbuN2dXHUwMDFhu1x1MDAxY/oy/L9iXGbJIDBFKKDq+MV+p97ReWvzsv3WXlDcZ4BDl+LKhLNRtrx/dDi+XHUwMDFmbu5cdTAwMTf0/PTlyuHC6PLS1tXh+GtcdTAwMTRX/TLFXHJcdTAwMWSf4E+Y0JO28X/R0CvTXy8nJia69VL6XHUwMDE3VPE5P35qXHUwMDAwSZKeXCKEfXlcYq6vWqXL6KNWT6r7309/e3pt3493r+35wd328ezG6dL2/cboqJt/klXRpSb7M38/fed/ujT+vZT2snV7+aK+9lxctCVcdTAwMDNL9rJj/2mtvrbmJ+Zu5rS/Nl8277b3JsdWL057sY7uNjd3r85bQ6CxrqqxXGLEXHUwMDFhdVx1MDAxYrX66uyLNvdRdTtQXHUwMDExT5oru1x1MDAxYe6cZo+y8+y8m+K+rSW5fXJ8ubh330ZxVL460TzaO7yrvLmkc7ik8cOTq62/XHUwMDE2N3dbsF+t886Hd9FKnXie1cqPjVx1MDAxZe7tXHUwMDFjJ1x1MDAxM9jarurt5d5m8/Dp25cnXHUwMDFktn9cdTAwMTOX0YS48y9d7c6T872dvePm4VKPS+p7dnqBXHUwMDA1fJ8ghVx1MDAwYmtcdTAwMTGMlp+d3cMpvbe+vm+nv2xcdTAwMWNs3Vx1MDAxZVx1MDAxZH6ev59cdTAwMWbuICVcdTAwMTjX0JbxmE9cdTAwMTW/6jHSSGAk91x1MDAxMznjlXSh5kjVXHUwMDAxXHUwMDA1oKJb2677QFnWSZGcpC6ZXHUwMDE2z/225/NlXHUwMDFhrLEkVozsI4+OwiiucjW1NKiIy3dcdTAwMGZvr1x1MDAxNkLz9kD++DI1snzup/4gXHUwMDA1nv/xnFx1MDAwMfTMJ7n33lx1MDAwYpb6PCPDrlZcdTAwMWO+7Vxm+3+aVZqiVP+dJSqkTUhcdTAwMThFXGLIfIWUeepcdTAwMTeJ0bWByHr2/kpI8ixybS7SJpwz31x1MDAxN5/ycqm5dUZy2zCrO7VcIjVcdTAwMTJQQpOVZJFW5YOuzP5j2nMmyVxiU5CdXHUwMDEy10NQXHUwMDFlcbDd18jui/GsmcEsXGJcdTAwMDRV9VdoSFx1MDAwNePYXUCe71TI+UtMKqjGtLmd6/1KXHUwMDA0Klx1MDAxNnOF4ab57tfCTa9cdTAwMWX5OFx1MDAxN1x1MDAxNVx1MDAxN75cdTAwMTbaJ9blaL1E99JZfldzpTysS0Fccvn95Vx0o1xmXHUwMDFldoKYc3NrVZ6CvKhcdTAwMWPhySSjLTgpXFxcdTAwMDROXojobOBcdTAwMDKIqjxtpFJcIljrJff6XHUwMDE2LcKIjrVhbTx+VmbyXGap1vgkcCZcdNUukOeQ7cJzQlx1MDAxM1x1MDAwNYHFmbwgOMfMNTE40SXlMKuIPWFN0Vxi3nBVXHUwMDFl+0o4J/hN3Fx1MDAwNlxcUlx1MDAwMtQ+XHUwMDA2z65rW1xcdr94qTg2qcCmvC9cdTAwMWJcYiRvkCCmOLgos1x1MDAxNWqWPSpN5kBcdTAwMWTgY1x1MDAwYsThqnjHrMQp3bW7x7KQ8Gwna+UlSyejXHRpXHUwMDA1I1x1MDAxNCe/X1bpfDJdwlx1MDAxN0xZi1x1MDAwNj7Ms0vOLlx1MDAxYSaVPz9cdTAwMGUzKFx1MDAxOVgrL1x1MDAxOWKGVdJ0+3iKXFx1IYzPX7BkMdCGyFx1MDAxOa2SXHUwMDBiNFxcP2C8JW63c1x1MDAwNUFbXoJ0XHUwMDFiaEC6wpJcdTAwMDeoyV/AxczBJyOXXHUwMDFmkOhT89nCn5R4Jlwi6lx0qSfcP3r2wEx+hFlfjLL0iMBT4Ol5n7A7eIAuhNzGXHUwMDE4guNcdTAwMDVcdTAwMTery3qbJd5k8XA1sHjKyvZpyJ1cdTAwMTDsoaY3IddUWaeCXHUwMDA1Uo6hqcB1pDyT2XxM5C50XHUwMDE5uMGTLqpenkpcZlF0ld1cdTAwMTZcdTAwMTTmMCg2XG7TtFx1MDAwYunF6uWlfaBpYzyHXHUwMDAyc/ZcXE6AwVx1MDAxOEe2nuHZXG5AXHUwMDAz5Fx1MDAxN3VcdTAwMDJq71x1MDAxZMGV+aJy8p5cdTAwMTFcdTAwMTCEk4vXWrL4XFySicKaxyuoymNTJuKwPN5wgTzNsatIzu9cdTAwMTToVOXBPEnuUW9cdTAwMWaWekhcdTAwMDKp3FxmieHk/2vvu5pcdTAwMWLX1S3f76/YdebxXHUwMDFja1x1MDAwMFx1MDAxMGCYqakpZ8ttyTmpblWXLNlykEO3o3Tr/vdZXHUwMDBipFx1MDAxMimLoEV3e5/p7trBllx1MDAwNIHAl8P6XCI7XHUwMDAxPUxjYFx1MDAwYlxuUM6QlZa8XHUwMDFkqjhmbVx1MDAxMFx1MDAwMlx1MDAxMYpcZofIyJVm/+B8XHUwMDA3SIHoRVgsXGZ5+Z5LXHUwMDEx6axcdTAwMGKmlSY1QdNoolx1MDAxOSdcdTAwMDaZRYCCtrNngfrYweVEgLNcdTAwMTjEXHUwMDBlvjdMVDC5SVx1MDAwM2leXHUwMDBlpkBcdTAwMDT/Rn5cdTAwMTQox1x1MDAwN54pYihcdTAwMGZccvt9mafhXHUwMDAzO9BgIVx1MDAwN2iuhMlcdTAwMDdcdTAwMDJcdTAwMTGGuMC4Y+c4xNnD0/HKztX9y8HB6lMkr0J1+LL7xeNcdTAwMTCKiU87QcFcdTAwMTg9XHUwMDA251x1MDAxOFx1MDAwN1wiVFiBl1x1MDAxMdJOYTPfZ1x1MDAwNVwidEWQ+1xm3EbiXGaK0fNcdTAwMGZcdTAwMDNcdTAwMTGMVdA0g7RcdTAwMTTai3Q27lx1MDAwN75ccili8mDb/lx1MDAwNFwi7J+P86Gs0EaCUcuyXHUwMDExwrekK3jty4pILNqK0vxcdTAwMDVZlSh86lx1MDAwN8l4U7qyXHUwMDA0JiiMaci+xLTMtc1kRbO0LGBxXHUwMDBlXHUwMDA3WmRahSNWav7O9UCnvoBq4PSBIGNcZlx1MDAxOVxiWVx1MDAxOPm+5jn7XHUwMDBl5jLtXHUwMDFkXHUwMDBlSLdo8ilFjs/jRoKQw1x1MDAwMI2Ls1x1MDAwMWNcZmwo2Vx1MDAxMVwiXHUwMDAzu2jKVItcIlx1MDAxNsUx0kNQdpc4XHUwMDEzlDW7Z1nkozjeKWVKWiiIke/vsGBcYsdcdTAwMWVcdTAwMGZcdTAwMGKDXGbGRmBStrxcdTAwMDWLh1x1MDAxYVx1MDAxNZzdJ5yAm0P4frB0aJQx7pOaaK5kXHUwMDEwYWeJu+a2QzjiXHUwMDFlPcDIY1x1MDAwYmN6NCqnj9Aj8Vx1MDAxY6NWLL9cIlx1MDAxMlxmXHUwMDFieFx00pPG/Fx1MDAwMcWwX5xcdTAwMDNcdTAwMDHBQE6VTSwgUVpcZlxmvMn1fFx1MDAwZVwiXHUwMDBlQPasq1dOXHUwMDFlOVx1MDAxM+6GcVx1MDAxMHtEqVx1MDAwN2ZDXFxoXHUwMDA3P6rQc1x1MDAwM1x1MDAxNoOB59H/gceovMxcdTAwMDYj1mWEJlBeXHUwMDFj4HGiwtCExErxWPBcIlOwXHUwMDFmkDJcdTAwMTGnjkpto4Iu67FZmbNeXHUwMDAzuqFpyFx1MDAxZk3UOKg0327eiYW5OVx1MDAwZfSBXG5cZtJcdTAwMTAsnFxmzZqnOFx1MDAxNOtcdTAwMTCWZPtcdTAwMGJMMmh3wlx1MDAxOEA1ZuZhXHUwMDBiSCwhklx1MDAxYnNcdTAwMTGCvlxybqnUwbFcdTAwMTJcXGBzSWzRYSGPwDSEXHUwMDBmYNOZSuO5+Fx1MDAxMYNEXHUwMDEynj9cdTAwMGJcbp2OTrGZXHUwMDBiXHUwMDFig0WricgzuWBgy0QtMFxig9xcdTAwMGXrgVx1MDAxNlxijs7KZcH2psn1YNGzNJVlTIw+uIBcXMM4gTVcdTAwMDXpwjq9XGbp4dJcdTAwMDUjsFx1MDAxZaFcdTAwMDBcdTAwMWPA+lx1MDAwNXiD65HnQ+JxpGgvXG7ZQFx1MDAxNdC/XHUwMDAz37msxy44ooErglx1MDAwZaTW08SV9jVcdTAwMGKvjVx1MDAxZjlgXHUwMDFiWHgoTopcdTAwMDU1s+wvmFxmp2E9soxcdTAwMDCHXHUwMDEwa8hBgdjyO9whJzUnzkdqQSpKz5p/jsFcdTAwMWJFXHUwMDExxUluiVx1MDAwN6nTO6QkXHUwMDAzMfkwTZ1cdTAwMDA5XHUwMDA1PF/pwcElXFyNmqyOxXqKIF6CJ1x1MDAxYzlcdTAwMDScLTo4iFx1MDAxNVx1MDAxZsCTXHUwMDA3xFx1MDAwME/fsFx0WV5cdTAwMWVcdTAwMDMsubj7irhcdTAwMWaaU5AtupCfoukohvFcdTAwMTC4Yq6Yv1x1MDAxZfRcZkFTWKnKXHKqNItcdTAwMTCmXHUwMDExkkHbPjmX6Fx1MDAwMZH8OcqWXHKKRIJI8TClVUgwXHUwMDExcJJTXHUwMDEzjc/wNFxcX1bbXHUwMDBi6WWEXGbJOVJcdTAwMTZ3V+ZSXGbR+T1bXCKZUKBMy0BIiiBcYlx1MDAxMvsmVyQwwFx1MDAxN1x1MDAwNjA0YrdLp+LrRG5lhD22NvOFc8nLQXWwLDtcZkFcdTAwMTMwUYKUecq2k4hcdTAwMDRcdTAwMDP2ZrApfznBcLJvhsQ3uVx1MDAxZThRXHUwMDEzqsM1/cTgXG5EXHUwMDAwkVFgTsB5SIWaXGb7UqHIIVx1MDAwZZhi+Ur48Vx1MDAxZimIXHUwMDAwX4IrXCJ38Pj9ndbtz8WTpSu9di6evKVvrcuH1a9cdTAwMWWIgE1M2Fx1MDAwMcOEjVx1MDAxZeVzkkBEUFx0qSzCOMeRLnEqXHUwMDFhiNDQXHUwMDE043BcdTAwMTKjqk1cdTAwMTh+nIzgccjDXHUwMDE43Y+XbTKR4TO7XHUwMDFkZ5yzJVx1MDAxMdDNgmGMvJJcYqisq3Dv9qd5rMpOt3e7c2Cet/9EXCJGP7hcdTAwMThqM0JcdTAwMTHFI1x1MDAxMeUvSDVcdTAwMDQ/RVmU1imuL5uMNVx1MDAxY19XUWpcclxyj6VcdTAwMDHhwFx1MDAwZkylXHUwMDE2QZJcdTAwMWWnkLhu0WpeyfZpXHUwMDE1TbFcZlSFIK5wXHUwMDAwmTJnnsChnZhNdWzwhs0j2SqRcoxS/OOi21x1MDAxNO1mMU17ZCtcdTAwMDd+9XpsmCGEXHUwMDA2XGbtIDbvUldcZi+MXHUwMDE5YJdOcdp7xlx1MDAwYlwiLaBhhUjltFxi41xiRy6RTVx1MDAwZTaLtkCbkvjlWqRcdTAwMWQt6Ek4XHUwMDA3XHUwMDExMdiJS+eQdf/aepItP0aOWWa5etL/XHUwMDFlPcpcdTAwMWR507n8+V1dt/eWX+qbd19cXE9qaTNVXHUwMDFhpMZu6VTloIoqNpQ6sFM/T08yYk9H0YuYU5tSOoj3WJSCxFwiVdlcdTAwMGVcdTAwMDdcdTAwMTm33Y7hXHUwMDE3/FGUn6MoKZKjiVx1MDAxMOu/Zr7669dj76htYk6C1ClBZUJSNFx1MDAxY0PfSVBBiIeCoCCBXHUwMDE392KnMp924Fx1MDAxOUWtXHJcdTAwMTeI/FxiXHUwMDBltKAgPIFcdTAwMTfBRc7UXHUwMDA3Md4hnaX8+8xj12IpXHUwMDEyvathNU9uaVx1MDAwNf27MYmg03AgVGiG022Ss/jV6+F2YdVrmPWhsPVxqedl0ZzFaUiSIfnrsaFZXHUwMDEx1jtlglx1MDAwZlx1MDAwZVCGkmihoeNcdTAwMDapXHQl57apWFx1MDAwZmZuXHUwMDE3WlJcdTAwMTnGXHUwMDE1baOtS/ThK2tKRTBcdTAwMWEh3f3JxZvVo6XW02Ov+fhw3/l+tXrb3nn44nrS8ypCj1e1JKX1+LVkaj+urZ1cdTAwMTeD772MNvxV0FPEXHUwMDE5XHUwMDEy2oSBXHUwMDFlw0ZcdTAwMWNhR1x1MDAwZd5DXGZfgiFl9KORhn2tQZ5+lGblp7e2Ud1t1LdcdTAwMWU3bv2dvf3rpT/6cfRDuexqhylcdTAwMDQ6Ulx1MDAxY1x1MDAxNJeNRts5jHYsqTQ6XHUwMDBlVjq1tGtoXHUwMDE4hcMlPFsg093iXCKAk0i0Yo5uIThH7oqqXCJcIo9cdTAwMWTtXHUwMDAxrP90go/li1x1MDAxY3gjXHUwMDA2ySFcdTAwMTcwXHUwMDEyYnlwXHUwMDAyJPNcdTAwMWWKwelcZshcdTAwMWSh5FmxXHUwMDE1uKlVgsp41HGEQFx1MDAwYvihtOAlqLKGcrVS1+FcdTAwMTh1hVx1MDAxOTeOUiA4nfbT7Vx1MDAwMkR5oTMkbUrR4Vx1MDAxNFk6XHUwMDFmsGTVh1s2XniSLGjhKzRb2lx1MDAxZDPDplx1MDAwMqnAwc0qzJbJWe0vlEW+XGJcdTAwMDK3Ylx1MDAwMkMocGIww5TO2Do22UbgXHUwMDEwJrRwyNqhNt2HvaXZvVx1MDAwMe3PaozMnGVcdTAwMDOzhSOEPcfUZlx1MDAwMIWN5Vx1MDAwNHN0xGpOo2jQpmIlvjPZXHUwMDA0xM2DXG5cdTAwMGI4XHUwMDFkgGVBKVx1MDAwYsVcdTAwMDPf4Yi9OPufTzVhXHUwMDA1vjFnwYbYIFx1MDAxM4mp9fBcdTAwMWHsXHUwMDE2XHUwMDE2IyunVHNYXHSoe/BIXCKMeP5cdTAwMTPreVx1MDAxNU5dJpZZKFx1MDAwNIMq+SdcdTAwMTjZdLIk1lRkXHUwMDEz6KlcdTAwMDVcdKVgWCBcdTAwMGXLKMgvxsV6TDZyMI9cdTAwMTaZ8nkykfJJ9omF6lx1MDAxMDeDOGHAwk6JJ/RGekH8RkFnaJ9cYk0u1Vx1MDAwNGRVol2HPuiFgmxiQcM+I+Li+8Jirzh0NMg4i1x0XHUwMDEz1HDYsZ9aj4DjIcMuOGCRj87P9TSn2EpCJWWvxK9cdTAwMTBdgnDmKi42dVkwINpgZDhG10vDZflESVx1MDAwMb1cdTAwMTiCXHS61TtQXHUwMDAxcFx1MDAxMp5mfa9KY5yCKSPOh2Z3lXSxabmgXHUwMDE3XHUwMDExZZ1cdTAwMDNcdTAwMTNwmCmsmYD1XHUwMDE1rDXC/lx0+uWQt2eZXHRhXGbNoCRjYsFcdTAwMTBfx6TqUFx1MDAwZbksXHUwMDE4wYSHoGHtMlx1MDAwN4pMLFx1MDAxODFccmvsXGJcdTAwMGUrKFx1MDAxZMiQvIq3Ss4nsS1oqVx1MDAwNSnPoE04XHUwMDFh2nfJZGNBT9Lmw0lcdNvsMilcdTAwMGJFhVx1MDAxM4+DpPTBIdrKXHUwMDE1OeZcdTAwMTE6z1x1MDAxMKIsXHUwMDE1XHUwMDBm5opcdTAwMTFrwkPrarqZXCJMZ+Km8dDKXCJSTS5IXHUwMDA1QNBcdTAwMTglktSvy4J+KDkzRnHitUhcdTAwMDE9UV6DXGIhypVVUS7rwUsz3Fx1MDAwNoudVPqRafozVFx1MDAwMHkt2O/gtCCj0tPzp8OXw0FcdTAwMTfs3DvURGHDgpxcbuRMOLPO0FQsSlx1MDAxNTxcdTAwMWGP03Tyg8N5t2wqoYakgdHJmlx1MDAwMeWClZVDiDArlHWyWW4stNNcdTAwMGVn8kpgQVx1MDAxNcfyXHUwMDE287IzVlxmXHSb5Fx1MDAwYqhcYjfCmS1wZMjGJ1x1MDAwZZmD9Vx1MDAwMyvNacFZXCJRRlx1MDAxNVx1MDAxNiSFhFxiI1wir4tqni21sWJAk1xmXCJcdTAwMTG0XG6NO69eUVx1MDAxMGFsW6RyxCG6SLDZmlx1MDAwZlx1MDAwYkLOyFFSy4H9ZitnhZeZdIuiwLV9bLb5gFx1MDAwNSNY8zCJWYYu84er5Nk3SlU4rI+4jvCNYL47SO3ZJpiCUFx1MDAxNLBuQ8NIlkN542xcdTAwMTNRkdkphox2LfubbcMqliBRWGqi80Va5HPzbCtbaVx1MDAxNtnS8Vx1MDAwMbdHtEhcdTAwMWNcdTAwMTac6Vx1MDAwNsBcdTAwMTVcZuAxh3ZiXHUwMDE0LLvc9XLcXHUwMDE0ymzGQ/HYgoN7XHUwMDFj1pvlR2E9I8e73ub19Fx1MDAxNHWAIeybilst81x1MDAxN5ztiyq/XCJxXHUwMDEw2D7nXHS5gFx1MDAxYs52lrFcdTAwMWUnXHUwMDE1XHUwMDA3nFx1MDAxOFx1MDAxNFL/uXXCv+/OY0E/XHUwMDEwbFx1MDAxM/MhhVx1MDAwM1x1MDAwNyN7drxcdTAwMDHr8VVobcJ1hy6V/LMjXCIqqIiAiVx1MDAwMVx1MDAxY1x1MDAxZqdcdTAwMWY7tF7nXHUwMDA0bbBcIm+WXHUwMDAxXHUwMDA3XHUwMDE20TpcZobKXHQsYUHPXHUwMDBlK/ZcdTAwMWThXHUwMDEzZke+sJyGyrbTLj2jnXCMZ0bnuCBcdTAwMWKpObCHXHUwMDEwK1x1MDAwZZ156c9Phm1zP172fko+sHKvMyE3w+lNXHUwMDA058w8bEFqS/hcdTAwMDE7g1x1MDAxZbT+y5xcZlx1MDAxMXOsXHUwMDA10lx1MDAxNEG6IOdcdTAwMDNcdTAwMWObSJSIQ44ybarFJUos8VwiSM9cdTAwMDRMYk6JV7JELltjxCqNvXuwajP2c3GVlqhcXMXKfTiAfpRer5jKLdlcIijbYklMKm1bTdIjXHUwMDFkP2BSlW3zXHJsUjKIXHUwMDA1/pjLJFx1MDAxZNjMRKIlVkhKUFx1MDAxNTaZXHUwMDA3Nn3AZDZcdTAwMTO7XHUwMDE5L6GYUT/wOlx1MDAxONKdJlpcbntcdTAwMWRDx0hyam2mUqC4YzR03VwiyVxu7jDNbkVdt7J9y4H3XHUwMDBiXHUwMDA3RoVcdTAwMWGkXHUwMDEzpNcr6P1cdTAwMGX8czCbiM98Pv88XHQgXHUwMDA0/JvFdSlcdTAwMWVAXHUwMDE4hDjCkGNDPJOGXHUwMDAzL1x1MDAxY+JIgjBMXHUwMDE2ss5SpyNcdTAwMWNFgzCDKFx1MDAxMfVrRPyGTNypYJhoXHUwMDE4x9I6aceaM5A1XGK1XHUwMDA1vuaciUxMp3CoLVx1MDAxM+2bL1x1MDAxNpi3v6LByrxcdTAwMDMsXHUwMDFhTc274cLh3jxcdTAwMTIsXHUwMDFjkM5jksIx81x1MDAxYy4uXHUwMDFj1c+RMoXTXHUwMDBlOWKwcF6k7MRNjlx1MDAxYSmcWcrRc4VTXzmKuHBuLsdQKJw8nG3IXHUwMDE0zm3OtrJcbudeS85ccs+2UVx1MDAwYqeuy06tl5z6z/E/ilYmzHaPildOlF3aUXbtyWzvt3hxzGznvHj1zuzgQfHyopzoRvFcdTAwMDKo2eGX4lx1MDAxNVqlXHUwMDE3kZVe5/ZcdMV4X7p6l1x1MDAxNiSUXHUwMDA2lNvwXHUwMDFkefW7p1x1MDAwZlvPz61NuXm3+vx6+3L47W0h+OpcdTAwMDDZ79TvssHF2Hm4XHUwMDE2bSdcdTAwMGZt/sP1u5xcdTAwMTVcdTAwMDWdxfE1mtpw1I86qt9N3pOtk1x1MDAxZlx1MDAxNPDCYvC1N9bK/qd+d/jab52iXHI3hzA6XCJ20qdIXGaP45WG4DxOnXtcdTAwMWNbXHUwMDFjyFx1MDAxOHBDhmnFINhqMkBIcYmjQ1x1MDAxN9v5NIp/LVxiVFryKk/R2WBAhF/p0iZCaEaoJvw1aUxf6lx1MDAwNqI9jWFcdTAwMWPnL0hDUHNUvG+BoFLrgfBh7Fx1MDAxOFx1MDAxZCZtQPnKkPNccqmpoWKtuZBWhliJlzJcdTAwMTD0+Vx1MDAwYjKFXHUwMDA2W1x1MDAwNjZcdTAwMTlOS6ePkGNRcXxcdTAwMDHb66VcdTAwMDMqra5IjlokmrfF2czMWtNs7Fx1MDAxMco2vTroQk1cdTAwMTBeosfiuThcdTAwMDUsbd3x7KArjStmXHUwMDEyPFx1MDAwN1iKmvg504qOKnSwoKhcdTAwMTM3P9/agWOjiaVAZ1x1MDAwZfRcdTAwMWKkrUVje3pgQznqfkPPXHUwMDFmdr6OUaNFuvRcdTAwMTnOXHUwMDE1jGc9gHjJ3Z9cdTAwMGZcdTAwMDFcZvpn8G5qbojAXHUwMDEyuGBOR2XPVj7T+ZWQViCuj9C2nklb7zBZfFx1MDAwZU30hXBcdTAwMDL+oSdMSzCY1qptM7OE2FxibG+uS692UMGbXHUwMDAyQcAlXHUwMDBiU52eqFxuXHUwMDE3XG7OM6w+t1x1MDAwNuGgXHUwMDEyXHUwMDExJshcdTAwMTBJNYPzRteM8SU6RsJcdTAwMDNf5nuO8KVcZlx1MDAxZVx1MDAxNtZ7XHUwMDAyTJ9aj7hauP9cdTAwMDF55i9cdTAwMDexQYQoXHUwMDBloGArXFzKXHUwMDExVTBcdTAwMTR96Vn0L4e+u7BC8F46I5JFSynbnZj7RIxcdTAwMDHhXHTJV/OWi4iqXCJcdTAwMDJcdTAwMGVcboBcdTAwMTSEXHUwMDFhSTnxUnOyV1x1MDAwNLLULlx1MDAxMOlcdTAwMTHsYjtnXHUwMDBm8kVkeFxynMiJ8yOE9PzlfPJcdTAwMTFcdTAwMDd7x9iv6VxiXGJccpvIXHUwMDE3hDpwQIiKKlx1MDAwNGdcZoeZ4HSxs6G0gehcdTAwMTHxq7nKTdC4w9UmjJRcbphcdTAwMDXs4MPXWexxt855ai9is0OxMSqQ8lNcdTAwMDLC43F8MZlbO9xcdTAwMDZjilhJK1x1MDAwYlxcXHUwMDAz6TL5wCEjelx1MDAxMfhcdTAwMTZOJVx1MDAwYlNcXFx1MDAxMmGaXHUwMDE4iFEw6CBNrWdH0smkVyyf0zhoiVx1MDAxZVxcPMGCsnxivahcdTAwMDLTjljaIShcdKrDYTlCmkVcdTAwMWWDJ1x1MDAxOfAlXHUwMDA2RDlwwnjMNjFy5rJcdTAwMWWHXHUwMDE1g1xcYuskXHUwMDE1o+aUXHLDmHOA21x1MDAxMi5pXHJcIpRcdTAwMTEqbjCjwqRcdTAwMTdMvTzvXHUwMDBloSyTWdeJap7zXGJcdTAwMTniXGY5SZZcdTAwMTDZtHLyg5izr5gxXUIqcnBn/Fx1MDAwMHPSIFx1MDAxNuQkVfo8OrSjTOZkXHUwMDEyhu3tnGZBfECHvMFsXHUwMDFlxnIhXHUwMDAxxTxoZ99cbv05pYzUXHUwMDE1O+JihEQ3n1x1MDAxNMR6XHUwMDFjbcM8XHUwMDEzXGZOnT+EdLaMllx1MDAwNlx1MDAwNrRKZlx1MDAxNTjYLrNcdTAwMTVcYlaDmcs0O1SbdFx1MDAwMfGbrd+kXHUwMDBmXHUwMDA2kZxdMuh8n0/9StbJXHUwMDE47bHJOoYjmc86kNAhXHUwMDExyFx1MDAxZLKFeZRoXuNcdTAwMDXrUVx1MDAxOHBARDzHJ/d5Z1x1MDAxYlfMXHUwMDE0w8zFXHUwMDEzi8BYiNX5bD/J7dO2jyFcdTAwMGbmtEyxms/Zzlx1MDAwM2bLvYzZhjOWI1x1MDAwZWBkJ31cdTAwMWKXgTs5lr2MKuAxXHUwMDFjqlx1MDAxNyMq5vq+OZ5HVGG9iFx1MDAwZnrXXHUwMDFjST6vY1x1MDAwNDlBpF7YVkm+Mn+9WY6bXCLyvvBw+1x1MDAwMYO70Zx+pbKeOWRsKGPjb06/V9l4XG69XHUwMDA0XHUwMDFkj37IpZbZfjnWXHUwMDBiXGJmXHUwMDFk+USEgLB1WG9m4Fx1MDAwMFx1MDAwYnKsi2SQglnnvOVmxzVUPKPd52xrzen0TuCMM1x1MDAwMi9YUEKOwpExXHUwMDFj/Fx1MDAxZThYQ7NjQ8T0p3FDnO5cdTAwMDBCzUH1zlx1MDAwZV8x0kk8XHUwMDEyZsGMzZXkLZhcdTAwMTNi44JBXHUwMDAwxuEgc1x1MDAwZjZC/oKZz0+GXvM+v1D6jlx1MDAxNko/tIXS73WhdNJbSJiD+PCenlwiXFxcbnPHQsncu5BIXHUwMDE37StOgEtcdTAwMDNzf0C8LCTyXHUwMDBmtoRcdTAwMWZMKbMsLP9cdTAwMTZcdTAwMTJcdTAwMDFcctVcdTAwMGJ6ZHHrnFx1MDAwMnqhZFx1MDAwNbKQKDjBfGYo0lx1MDAxNVxuxVx1MDAxNdxCooCHmN9cdTAwMTmNWUxcdTAwMDEvlG0gLCRcdTAwMTZcZj5jOFx1MDAwMTLdXHUwMDAxWtiCWUgsLMlcdTAwMDS0NVx1MDAxOOezsFx1MDAxNsq1/1x1MDAxNso2T1x1MDAxN8q2n1x1MDAxN1x1MDAxMlx1MDAwM9+fXG7C/lx1MDAwMVx1MDAwM38h8UA4OVx1MDAxZFwiPjWS4Vx1MDAwM1x1MDAxZchC2S7SQuLDRVxuXHUwMDE0XHUwMDE4RGkrurBcdTAwMGK3kHiYXHUwMDAxZ1dcdTAwMDZUKHN5mFx1MDAwYon/q4boyvP5v1x1MDAwYlx1MDAwM1x1MDAwN91nUVxuq1x1MDAxZjOlm1x1MDAwNVx1MDAxZPSFQVxmwfPDePhj6lxiXHUwMDBix1x1MDAxMFx1MDAxNoZBXHUwMDBlw7RcdTAwMDRs/rliXHUwMDFjXHUwMDBiSVx1MDAxMIZZO2hcdTAwMDCdPsLCMZiFQZhIXHUwMDEzqj7S6YrpwlGihWEgi49cdTAwMWJyJtqcgayFYayNcy040iazYsFY2zDep2HMQSeny85cdTAwMGJHXHUwMDAzc7dYOGCZd4yFQ6o5XHUwMDE3XTTim0OIhVx1MDAwM9I5fFI4YJ7HyYUj+nnCpnjOIUdcdTAwMWNcdTAwMTZOiuRI68I5m9napHBGKUfbXHUwMDE1TnjlqOPC+bhcdTAwMWN7oXC6MMegKZzNzLG4imdbcyzCwtngXHUwMDFji7V4tjrHpi6eTs+z+osn/PP8ksIlXHR5nlPhmolcdTAwMWPXrnhRR47zWbzqJMc9Ll5cdTAwMTaT58FcdTAwMTcv3MmLMVx1MDAxNC8tyouDXHUwMDE0r37Ki9VcdTAwMTSvz8qLJ32ghiwv6PWBQre8yNxHyvG+dFx1MDAwMW/AVlxcXHUwMDAz23T4hrz63U3149vaxtJhtNR/Xb1cdTAwMGLU3o+o2/zi9btsTlVmODMzVcZLg5peO1iR9flqXlx1MDAxY97meevsopmt4/UrTDaCpqLU4M5RXHUwMDE5L9+iIEA5OZH3kqnitcOTOI8ub56LXFxqR29cdTAwMGbbZ3rnrtv81jvyl6o3XHUwMDBif8p4Rz+Uy7a2+4BAR9A8UPXBlFx1MDAwMk+8xFx1MDAwZe7RmFVcdTAwMDezjz3QIZubQubm2TOQXlx1MDAxNLpWs51A2943XHUwMDA3XFwhqFx1MDAxN1x1MDAwMy1cdTAwMDaNJjkjU4l0XHUwMDE3hYBTXHUwMDAyReex189lYFx1MDAxNWVm5IOeXHUwMDA30yozjS1cdTAwMTLGM1tu/ETnuiRIIIFcdTAwMTX8ZVx1MDAwM/Mpa1xu2Vx1MDAxZTNoT+g8XGJ/5TT3XHUwMDE1XCLA0NJQXHUwMDAzvKJ0s1x1MDAwN/tU6Fx1MDAxOHpsT4yc5vbBiSQ7XHUwMDBlplamV4RdpWXkK1xyRVx0Y99FR8LA92GV492Go9ozllx1MDAwMSc9RjKRU26TPCVcdTAwMDMu3miCZWpJXHUwMDE4XHUwMDA1UGWwcdxXVOyGUoNcdTAwMTGWk9NcdTAwMDBpXHUwMDEwMduiRNL25vLUMFo09CpMcM1e4jT94InZ9uZcdTAwMTnabpFcdTAwMGJYX4VcdTAwMDOQaWlcYk9nZtfw4vBFXHUwMDAxvWTpe26okVx1MDAxNdbZaLaigWk4jzFtqLK/woPtXHUwMDAya98p5GHHxoFcdTAwMDVcdTAwMDdzLNOWNFx1MDAxZVl7WCxpo3RZUNFu9LxcdTAwMTD06GfgXHUwMDBmKlx1MDAxZVxcXHUwMDE1Zlx1MDAwYkJJT9Jp/pSBSVx1MDAwYlx1MDAwZieet5619mFuwlx1MDAwM1x1MDAwN1x1MDAwNzjmSbhFvJG+tFxmfXZtplx1MDAxNrRzfmlcIlxuXGJS7YLWh1OEcNBcdTAwMDJWqFxu0sP3rMukXHUwMDE4NYpcdTAwMTJIXHUwMDE5l3uGXHUwMDEzy1G6wVx1MDAxNFxcOFmJcLCKW7fuitOcWkm8XHUwMDBl9rBOmU+u7KBfXHKRXGJcdTAwMTJnU6VcdTAwMGKzgGo1XHUwMDA3OTOWmo5UqIrSbM/EmVx1MDAxONu05lx1MDAwMnmlgoAjvlx1MDAwNX3qNMSAquD6QVx1MDAwMp70mGZzXHRcdTAwMDVQ5PicoFx1MDAwZbaOZ8imVqSWXHUwMDA0XHJcdTAwMDSuMzusXFwkYELgw2EymehcdTAwMTbcXHUwMDFmyVx0oM6UKCm531x1MDAxZvJuXGKTZGE4WKAoXHUwMDFjivtKXk/heZmgUlxmXHUwMDFlwGbNXHUwMDE0YFx1MDAwN3BEPc35XsolOcSZ4SxcdTAwMDRcdTAwMTVkfHpCaVx1MDAwMOuQ9lx1MDAxYtRcdTAwMDPY2Vx1MDAxN/lcdEq2XHUwMDBlM94kxDSgOVPBV8F6XHUwMDAwUVx0Yts5XGZB03hcYshhOFxcduTOxHJ+hdM4Q0ZlXHUwMDA0W95cdTAwMWSellx1MDAxM9MoqYnUkIFoYOySylx1MDAwZe5cdTAwMDBbOvO7slx1MDAxNVx1MDAwMVx1MDAwMZSm5I+HeGY6+PEt2Fx1MDAxZUU1y7ry14tcdTAwMDSeNILaxVx1MDAxM1x1MDAwNWkgQfhcdTAwMDBcdTAwMWOUzVhe3Gmdt55X4ZRkRqKm9chnXFyK/OVcYnBcdTAwMTBy/rhiX7OXflxcSfwwtuF6UK75uEtcdTAwMWWIZYaXzuOD8Ja+JKCByI/IeFx1MDAxNUg4XHUwMDE4MyBcdTAwMTRcdTAwMThsRJBIr+crRtB8XHUwMDAzmVx1MDAxNSiHTi9cdTAwMWZEhUfxKKTTcMtYzppbkGKRXHUwMDA30eOwXHUwMDFjJ89cdTAwMGJw2SDAm2aO+GFxxWyLdliPgJMgXHUwMDEzUJg1TNOsXHUwMDFiXHUwMDEwmkExqOJcdTAwMTBcdTAwMTLk+Gw/tNwrPC9cdTAwMWTWgWBhXHUwMDAwxovTSi6YXHUwMDAwmoHdaUNKk/Ugr1x1MDAwM5BcdTAwMWREou/lXHUwMDFiwFiNwo6T3SObz5tPjJa+XHUwMDFjdGuUXHUwMDAwV3hB+l6NXHJcdTAwMTcxvWFhtvNXs9X5RP9cYonlq1PLaU/A+tPwVFx1MDAxNLvd85fT1k+CzU3chLSA91xizFx1MDAwMO3oJXO6XHUwMDFkllx1MDAwYkJF4FxykH1aXCKbXG6dOWxccvKOdrnD5mA04ZDxTDCH0ihBXHUwMDA2XqxhTJA+qXTwk7BcdTAwMWNB5EJGhC2Ox8Ryulx1MDAxMoZcZs1cdTAwMTmOZ4tcdTAwMWNw9bSdPVx1MDAxOVx1MDAxMj/Ts1x1MDAxZUtqOWaZPOJcdTAwMDRYae1Q8MrUI9Gy7VSnVEhcdTAwMWKvRlx1MDAxNivRwyPTfp53d1rTmWeqlSnwuc+OmL7MrITWXHUwMDFlyDdcdTAwMWZnX622o8ApiZk+Y4/8XFyEpy30XHLEJlxmeuZpclxylZlcXFx1MDAwMclcbpNcXEVcZpzEfuB8PEswLphcdTAwMDegZLBsaPLt2plcdTAwMDJcdTAwMDVqifFwzpmWzrJ4hrjz4K5cdTAwMDXM0PlcZnBH+WeXY3RcdTAwMGJCmbE4IVx1MDAxZV6m8tFySl9Q0Fx1MDAxZIOrXHUwMDAxo5bIXGJpgFx1MDAxYlx1MDAxNlx1MDAwMUBcdTAwMWXTeWVcdTAwMWFAR1x1MDAwZeOHQ2Y9WTOKTZJcItIxXCJ4+Vx1MDAwNNolqI5TPkpUiGVcdTAwMTWJXHUwMDAxgLJIb1FcdTAwMTKYyqfdXHUwMDFk0ObPR5HhfEBfc1x1MDAxYZuYMlx1MDAxZIJpXHUwMDE0XHUwMDEwc+R7kWu1XHUwMDA0o0pEXGZcdTAwMDXj45ym5jxgMXDG/YDqXHUwMDFklmT+XHUwMDA0LiW8O1x1MDAwNlx1MDAxZFSUXHQywsJgiC+A8mVcdTAwMDDG4WqgXHJcdTAwMDVNzummXHUwMDBi46usXHUwMDAyXHUwMDAyddtcZr1LwvVLZ2ZYtkZUZ/fMjPSWXHUwMDBlXHUwMDE3r8LecffsdvFo61E8XHUwMDFk3m998cyMNiwjXHUwMDE3kUxGcFx1MDAwZl/95ZlcdTAwMTnN6JlccjmPWKpIYsawdIR9XHUwMDAww1f+JGZcdTAwMDav/e7EXGauToTCJsjTjZJcdTAwMWaRXHUwMDFiNi1cdTAwMDPBXHUwMDFkRjBHgmCqyCwq32xwXHUwMDFmSoeu1FTwrcJCmLH9XHUwMDEw2jGO6pkobWB8QFUwXHUwMDE2T+DGXGJcbiPJYs2rzmxeXHUwMDA2nlx1MDAwNKxRSe/JZLIohXWuTcwwoGlcdTAwMDPnNtE2p10wXGJAXHUwMDBlvdz0XHUwMDFli1ouNIzpdcKjXHUwMDBmbUHX5DlcdTAwMTa21T5hPWatXHUwMDA0414gkbRZT9vUw/3rYVx1MDAxMZvDgp6dIYR/W7Dk9Fx1MDAwNpkz1dGgJNNhrFx1MDAwZUx7xvtccphFwqZMZaFo21x1MDAwN6BSXHUwMDFhc7ZcdTAwMTHGpXJIXHUwMDA3XHUwMDE04Vbt0mhLu1x1MDAxZZBcInQ6XHUwMDA0uEY7tP7QM6JcdTAwMDVcdTAwMDSVQP/Il6n14NnrXHUwMDA0fNtB5GA1vJeToYWFsU2vXHUwMDA2XHUwMDA3lfiw4GXYwlx1MDAwZVx1MDAxNI31wKPKhuJZv+an1tN4hSiYOiSgoktcdTAwMTeRsalLhuVs2DDj9cJsi0gzbrmivP3hjmA3+CyvXHUwMDE0XHUwMDBlXHIweceHZ/SkXHUwMDA3XHUwMDA3XHUwMDE2JFx1MDAxNTnUd86+XFxGNEJ4Ylx1MDAwNI/2WMQ7J/Ex4MKMXHUwMDE06+bBjU7sNos7XHUwMDE4XHUwMDBmUj4rXHJVrFx1MDAxM+dkX0arXGLgzdQ6kWTnXHUwMDE0L4yl0Vx1MDAwZoMglU69XHUwMDFis6Vf4UCfZXaPIJeenILHUTj9XHUwMDAyaVx1MDAxNEFwaFx0JjU2SpJar2D6heIyXHUwMDE4XHUwMDFmRKTmTMBYgW7YMO/50/R64Vx1MDAxNFxmJ1x1MDAwN0UwOkf1selcdTAwMWNHwVx1MDAxY1xmXHUwMDE2JPlpi8dcdTAwMTmNQzFcdTAwMGXWK5aDwXpcbiYheEpNXHUwMDAzYy2cg8F6rLJcdTAwMWS6XHUwMDEwaY+3cFx1MDAxNmaBMN4mXHUwMDA2z8jEhlxu52DiwUtJVt02XHUwMDE0ZI6vUFx1MDAwZYYpV/ptkKWMP1xukVx1MDAwNbUulINh/TW0XGaklYE5as3b9ILFsjDMW5NWIT1gs+GC01x1MDAwMfGCWVx1MDAxOCbWXHRcdTAwMDNcdTAwMWL6Q6MyzcOF8jB2blx1MDAxNY6HSXdcdTAwMWFmXCK9v6KJXHUwMDE41iaEXGY9XHUwMDA2xo7fMH56g8VSMbbWXHUwMDAxJlx1MDAxNCnatzoks17RXHUwMDFjObktXHUwMDAy6UcymDLaqXhcdTAwMGW/7PWYLKZ5MCgpS62noX7hg0SalUVcdTAwMGXDKiqKhfIsOo2CKDNcdTAwMWGBdVx1MDAxNYaDtlx1MDAxOLJccp1cdTAwMTCEKuzgXHUwMDBmiUlcdTAwMWPbZOlcdTAwMDWZIeBVwJOSoZ8vYmSFgo8g/HBpXGZTXHUwMDFiqVx1MDAwNfm4XHUwMDFjd1x1MDAxNFx1MDAxN4DnV/OzeMZ4lOtcdTAwMTBdXCLjXHUwMDE1s0pC+DBcdTAwMTOFimv989ezVSlCmcQ1T7XxVkJcdTAwMDXXXHUwMDFkd1xmo9JJXHUwMDExy7hccorjTNWUXHUwMDFlWbCIovajXqfT7LJBMCeVulx1MDAxMZpcdTAwMDP8MqCUjMZzQFx1MDAxNrSdg8/AXHUwMDBmaFxyXHUwMDBiingutjMotVx1MDAxZXgtXCJcXLpRIV1YXHUwMDA3mjH0qCCZ2N+dKTVgs6MmPj2/z2N5j8NcdTAwMTWHsIvwiaSDXCK9oFx1MDAxNJKGjLLVqC7jL1x1MDAxMtNcdTAwMTHWPLNY2UhKZFvTYUs7XHUwMDBlXHUwMDA1I5tcdTAwMTD2XHUwMDFjd6Ky5Uy2XHUwMDEwXHUwMDFjtmVEuW9cdTAwMTMvXHUwMDBlfFx1MDAxY3lsxvSTNoJMuSOb1nz+jSegOCwoiDZjIEn8rGnEzsqJglknwJSIvX8h21x1MDAxZNK+XGLrfTVMQTGYk+VcdTAwMTBq58CW8cLWTPiEOOxcdTAwMWMoXHUwMDEwWaj6/Fx1MDAwNUNILo/aXHUwMDA0p5hhXHUwMDEzlt5GoGfF0lxcdl+5TDH0mKWEtI5LcrJZXHUwMDE1lqBBjFx1MDAwZuJQ+Suy9zBcZoehsHTmh1x1MDAwN0ew86FccpW/XCJbd1x1MDAxNew3XHUwMDFkd8hkwOWh2UmMVm44XHUwMDE0gzPoaNjgjd2xXHUwMDFie1xuuDyszmBcXGA7rCntXGJcdTAwMDb4XHQxeIaXaaFh2NT6xLZ252+eVGHCXHUwMDFkjylcdTAwMGL0u9R6+1x1MDAxN73zqzfzuLB0/6NzXFxfr+79/OJZlV+DV39xcfFZYPWSjTpRXGJcdTAwMGJ0+Mr0bMpJ6/JeXHUwMDFkhLub529cdTAwMTffLuRO33+++f4nmzL6oVxcdv2M/rjPaOP7hGbD8jtcIsvv2iy/s7T87tfSXHUwMDFidEtvIS69yflcdTAwMTPasEtuXHUwMDE0L7+XvfR2+9JcdTAwMDFcdTAwMDHKRywoXHUwMDE5UqFszIfyMSnKxcwoXHUwMDFi06N0yJGyXHUwMDExUcpFbClcdTAwMWZT5jNgb8rG5SlcdTAwMWI3qGRYo9Jhlz5cdTAwMDFcdTAwMTnql4JXfVxmX6t0XGaw0mHKSlx1MDAwN1IrXHUwMDE56K18JLqS0fLKxvMrXHUwMDFkbrBsNMSS4Vx1MDAxYUtcdTAwMDeU/Fx1MDAwNMjLkkE5S4dcci1cdTAwMWTWtFxc1NXSYWFLXHUwMDA3ri1cdTAwMWJZ91x1MDAxM6B/y8UmLlx1MDAxZDy5dHjn8lx1MDAxMajLxsguXHUwMDFmxbt8pPHy0dDLR2z/cjj3pW+o9DMr/VpLp7yy5z+UzLxlT88oe7pH2dNHStZcdTAwMWblz24pdbRM2fZB2ZN5Slx1MDAxZVx1MDAxY1T2VKNyrdOyzefyZ1aVO1OrbFx1MDAwZqn8mWTlTkwrdZxb6ePmPmMgXslcdTAwMDP7Slx1MDAxZihY+sjD0ocylj828pdcdTAwMGW2/NDozZJng5Y8urTsyaplT34tezJtuaNzS1x1MDAxZe1b+uDhksdcIpea7yp5pHTpXHUwMDAzr0tNZpadbC19mHm5s9bLnlx1MDAwNV96vj/H8ShcXJGQ41x1MDAxOFx1MDAxNS6ZKLumY7ZfWbzoZLbfW7wqZrZfXrxsp/TKotlxjeK1T6WXZ5VfQlZ+ndv/b2j1kj3E0F4jXHUwMDEwrNzy3Y1vT3ur0euG2nm6ujjYW7hcdTAwMTby8OxvWr5cdTAwMGItwFx1MDAxZa9cdTAwMDD2oFx1MDAxOMNcdTAwMTn5WPUujdpcdTAwMGKdLeC1npznMVFgXHUwMDAxx0dcdTAwMTmIUVx1MDAwMS+cW1x1MDAxODhcdTAwMTFhNlx1MDAxM/ZcdTAwMWNt5nxYKctcdTAwMTDYXHUwMDE4UMr0XHUwMDAyXnXWef6+fdGuXXZfXHUwMDE2N3Zbhydccvn8p4B39EPJXGZcdTAwMGLF70lcXFxc4E2X44L+NmRcdTAwMDZcdTAwMWP5XHUwMDE4m8Ch0SGgnaBHUcr0klx1MDAxZeHwjFx1MDAxYTYmOrQtSbw3guCCLJ+K9Vx1MDAwNL1cdTAwMGKqw1x1MDAwNv1cdTAwMTjhNX9F9sYxmS0sLHJcdTAwMDZcdTAwMDZcdTAwMWTaQ1x1MDAwNuAqXHUwMDExayOXZjfIXCKPOINcdTAwMWXMxUD56ZNUcFx1MDAxNlxmIyyxN5BcdTAwMGaFolxirFx1MDAwZX/JTFx1MDAwNWuB5mBrnVx1MDAxOTZAO2hYJi9cdTAwMDQ8jNDieqU1NjH7XHUwMDAzKYKkXHUwMDA1JX89on0rhVx1MDAwZoVcdTAwMTbTJm1SXGLixUIyQWT4wiV14Fx1MDAxMekgXHUwMDA0vZnYSE8tXGKXXGJXXCLixjSH84PNQ7wsXHUwMDA1f1x1MDAwNbZ8lFx1MDAwNVx1MDAxZIuIXHUwMDFj6NM9Z8dtkEvZXHUwMDFlm89GXHUwMDE4XHUwMDBmXCJdeVSR9EPVsKvJXHUwMDAxaVx1MDAxMjfssUHYXGIyQ7pcdTAwMTDYXHUwMDAzXHUwMDAxepHRmtCVXHUwMDBlT0yQXGaBb4c7atst0/F5wr5gPSHdfDRcdTAwMDZcdTAwMTnB8FxulmjclJRajTFcdTAwMDGyXHUwMDExQU7Z4Z63XHUwMDFlXFxYj/G2KKJr56e7NyO2MtFcdTAwMTiKyTN/NeLlK8JJWi9cIu1TsVXVMFxc6Fx1MDAxNnA1XHUwMDE16jfGy32frme6fdhcYuLvM0RP5CVcdTAwMDdcdTAwMDcjpFnHrjgvzFx1MDAwMG7Q44vYWz+APHfw0KxcdTAwMWRrQlxy6ZaRLkRcdTAwMWKg+Fx1MDAxZfaP5S9cdTAwMDcpRVx1MDAwNFxuolx1MDAxZYi0Q8pYa8CbXHUwMDAy99rO3fzlKJbhiYZeXHUwMDEwZlx0z3pcdTAwMWZcZlxcST/uXHUwMDAzdnBwXHUwMDAzSfdRXHUwMDA3pOg0nlx1MDAwMFx1MDAxODGyvpaK5WPubcBSXG4p50FZltMzaDmQjLSwXHUwMDEzUzxvuVx1MDAwMDosJGwlSMu23qWW833D1Fx1MDAxMESpU+AnqMhcdTAwMDCmPufETFx1MDAwM9dcdTAwMTW4+UBcdTAwMDQgTEuX+atcdTAwMTFyQnBuwVx1MDAxNM1meLWS8pVQuFx1MDAwZWI5gIXAcCcjs1kxbyqBilxikYc9erz7/OWIICQhL3Q4adTa9Yg8XHUwMDExKcrtXHUwMDA0Ryd/PUNcdTAwMTheSHDiXHUwMDFjyTTuhLa94NFAjTusXHUwMDE2XHUwMDExkohcdTAwMTGkKShcdTAwMWJ4fkpDj9FcdTAwMDFcdTAwMDenO6hYXHUwMDFm3sO12venuFwiYId+KLltN1xyjvW8cDT6J1VcdTAwMGKUeXXO7YUgcihw+LpcdTAwMTFcdTAwMDd0uDzujMNcdTAwMGIr7Cv1jI6Sa5/rYsNcbrFGQkYsfKfAflx1MDAwZdlF4EBbWJtMY5qPKVwiO0RHXHUwMDA0WibBlvlYNmJcdEZIsFx1MDAxYiMs1OlcXPKEMX9cdTAwMWYvQCk6QjrPlnZMwUjiXHUwMDFhXHUwMDEyXGbKXCKrzCeMsV5kJHlcIkbczU+kzdZcdTAwMTVMe1x1MDAxMVxyREOtXHUwMDA3ocugm1x1MDAxY2WGXHUwMDA1YdrC8vWkduvUnq1ssVx1MDAxZe6Xo4I8XHUwMDExo0HNZ1x1MDAwYkiYPmCcXGJsQ1x1MDAxZsbk27WzbVx1MDAxNWmhTnC1XHUwMDEwyYZ40rn6bLYpJZXFy1witlx1MDAwM6d84Fvns/QkoyOCfFx1MDAxMzpCqM+2Qz1cdTAwMDI8sHpcdTAwMTPU54T6kWMmeyQnQkuJWNa7oOPPtOI5UUJwdlmCVDWvm+HRkYO4gGtcdTAwMTM55f7z/CBccvmjmFx1MDAwNY+MoUvsXHUwMDEwTZ7pqbE6wfh4WoghYyEo8lx1MDAxN5zpS0rC9XFcdTAwMTBcdTAwMTi0R0iVlLfebF9cdTAwMTfL0UFjKFxcSNaguES7Z/jirO4gtIRvkvk8XHUwMDBlXHUwMDAzeN5cdTAwMGZcdTAwMTVgNWpcdTAwMDFcIlx1MDAwMGkwuJfPbzmhXGZcdJOUXHUwMDA1i3hYXHUwMDExOkn8nGhcdTAwMGJcdTAwMTbEreLeXHUwMDE1vd3AXHUwMDA14WRmPIjrWeY2XHUwMDE2e0vkXHUwMDA3b3JiVoxv4qI4gSOM81x1MDAwNflcdTAwMGLOjKvJXHUwMDE45lpcdTAwMTHiNLJBg9xcdTAwMDUzn59cZrhcdTAwMTb7fGFbXHUwMDExxu/UmVx1MDAwNHCYXCJYYlxmQDv5naWtQ8Q2XHUwMDBl1TAwN21cdTAwMDY55V9DXHUwMDFjczJDpOKcqktcdTAwMGY1zoLZXHUwMDFi4U/BpOFIKuqzXHUwMDExLJHDgiw+Nlxu7zdcdTAwMTZjNLUgkThxd1CPbpjD4Drqg4A7XGKZVU2FT0KKY1x1MDAwMrq5zumE1NKgeshw0FJ2tFx1MDAxZGQ3rIvIXHUwMDA3P0acpeCwXHUwMDFlXHItfMiEU66EOVWoNZjfocdcdTAwMWFcdTAwMGKH5lxmVlx1MDAwMTDDXHUwMDBlNadk1vCsQFx0XHUwMDEyfS/y/Vx1MDAxOCnaYUEjPIZdXGLtaiC/Jlx1MDAxNlx1MDAxNJWQ9XkgXHUwMDE2YXGT8jU/4y6RXHUwMDBmyoXYhT8wXHUwMDA1u8mnSOFcXC9cdTAwMGamkHRYkXnQkJY5YbhVpk+NXHUwMDA1RVx1MDAwMdZJxIZLXHUwMDFmMHRcdTAwMDODLlx1MDAxMcdFWWcltSDkJ7HIYlx1MDAwZjB3NdBcdTAwMTm8uIhcdTAwMWUwXGZ0xnVTyyla4mBwf1BK4LCk55PvXHUwMDA2wzcziFrSXHUwMDBlgNScXHUwMDAwXHUwMDFiuFx1MDAwMVwisGo94NRcdTAwMWSoienDIUDUXHUwMDExh05cblx1MDAwYs7pQN1cZpBLmNORhTS3XHUwMDBlc3pNydpsPcKALybUPze5+vO89Vx1MDAxNKdcdTAwMTdcdTAwMDeruGVYha3F85R7hnXn7XvvurnZPrvZr+6/LZ++PLSvo49kWFXq95+XYYVQXHUwMDFh/sxPgGhS3z2RTZ2dSF1Z5d8pidSR3T3KnI5wZlx1MDAwN5lSSjxf5OFcdTAwMWO1/LveWvtk9WZz4/r2pLch/PrlN6c0qd3tjDTp8Dv+a4zakqs921r9sdI+PlCb9dXzq/7V5Yk8avxjnCyH9NZksvNcdTAwMWbDV/47s7VcdTAwMDJJ2JmE/XT+9jSVpsN3aZpBo0iO+ZG5NL1yfFB7PW7Ky4Ob9mlTXHUwMDFjXHUwMDFlLW3dnr9D05fN1uXzz/PfT9VGp6g6XHUwMDEwlTyMr5mk/fSzeff40PxcdFLJkrc3tS4gTd2s2IDr74/GXHUwMDE2/nJcdTAwMDKfr1x1MDAwZeDi/u5p/6pv6cib+O1a8/aq25u4YUub2NLhIyhw/GhcdTAwMWbPbbFcdTAwMGLWkFx1MDAxM29e7F517mwtzPnFJFU/XbWa3eHLT/djlVx1MDAwZS18eVx1MDAxM8v9rGYqXHUwMDBi7n9eda7umt2DiY3M5Kd3q3D0e/zEkWqClqQzO9XVTn3j6vll73lz983sq1x1MDAxZpudXHUwMDE3/2tcdTAwMTfh6Giy+sbzZS4z5WmK7LuGzGSyzORlmYnQ2Jz1msdMjebLvTm9iUx7UzTUUrO31t/cXHUwMDE4k9tzcNufqlx1MDAxYvvHM3O83StWhVfw7aWV4b0rXHUwMDAwPNalc8y4s1x1MDAwMHhcdTAwMTaeXFxbXT9Z8G7Mxc79wsbt0c73ry1cdTAwMDCMVJWUXGJcYkVFjIfbPi5cdTAwMDamWYuVKTIgqExMd1x1MDAxOFxiXHUwMDAyjk1cdTAwMTDw4vOK615+Pm40t09cdTAwMGbWOldbN5u74dJjp13/I1x1MDAwN35b9Z1cdTAwMWSFzXm+TFx1MDAxZqSrslx1MDAwNbvh4UtLj1x1MDAxNa5cdTAwMDHLdfPW8ysy9DysOTVcdTAwMTIsKy7JKmal2Y9cdTAwMTGy8zZcdTAwMWRcdTAwMDdjkU5EXHUwMDE4XCJj56dcdTAwMDb5NT8hJ3som+Bcbm0+bXw5VbHdXHUwMDEwnjTxjOTcXGKObULhLFx1MDAxM1x1MDAxMVxiY/xJMCld4TAmxqpcdTAwMWOiX2Fl8nCMzfqw9sjARM1cdTAwMGbwpj+fcGbex1x1MDAxNsr6XHUwMDFjR/bgrpVcdTAwMDZcdTAwMDExW/VrVrCnr2SC8y3Tp89cdTAwMGWIKGleylx1MDAwN7VcdTAwMWGQXHUwMDA2p3LYtECaNEBozJG4jsRKKJc5bzuiXCJIUS775pUtXHUwMDE3cFsv4abRXHUwMDAxpZhJsXuJ44y12/y9hNtDj1xyemGk/DS3R9Jn73fgKzZRlStqfrFJoOxUgiBcdTAwMWOT63k2wf2z2jx5/rZirlx1MDAxN15u1pu1naen6+cvblx1MDAxM1xixoz5h0D/QSSyXHUwMDA2XHUwMDAyg+FcdTAwMDS8iKT0065/KYaCSXagjMe5XHUwMDBlY1cytFx1MDAxYVx1MDAwNm9JdiEz1flhYLMlavR0f+yHv4P9ICtcdTAwMTLiXHS3XHUwMDE3JZVD6VwicWWTJ5xvktSy5K2o2Fx1MDAwM8uuN2mgZZlcdTAwMDdLrVx1MDAxOFI+RcaH01x1MDAxObjUXHUwMDFlqIrPzLNiV63PiVdcdTAwMTPrscddO+arOFx1MDAwMMvHXHUwMDFmw1x1MDAxMUnEokhn6OKXh4bGfDuDOtNcdTAwMWO4XHUwMDA1XHLkW56Z8+R0xY5b8YiuXHUwMDEwaM9l9svMuzVcdTAwMTWOXHUwMDA0iYhcdTAwMWNcdTAwMTQ4IdWI1MdTXCIhV3sl+yFipJpy/IX3szA4sCBcdTAwMTFcXKne/cJcdTAwMDe2kFxcaDa9XFz4LofExFxuVJuHSydvXHUwMDBi0tr7eyvCXHUwMDAxeUdWnDvzbvVcdTAwMDNcdTAwMTLkS5slbF3XUFx1MDAxOSM9nWeVvDz92DjdWm9cdTAwMDe9XHUwMDFmtaPry/Byb3t54atbJZyeXHUwMDA3V08o6Max2ZyJUaI4jY9NIFwi9ro+wypcdCZ2oKIpsYxEXHUwMDA0KTGg1rRVXHUwMDEycNaQkrktg3+skq9llVx1MDAxMFx1MDAxY1FbZ2ZcdTAwMTDWyLRKW6t4oHvcSkFcdTAwMDJbTFx1MDAxMLLJwFx1MDAxN/D/J50nXHUwMDExQHSx1j90gzI3XHUwMDE1kNa4+za5XHUwMDFjh+pGw1iAw4xcYt+6l9D8noBcdTAwMGWMVMpX5CBQwnvFjqTDQNx3+Yd/4EhGXHUwMDEz5zvfclx1MDAxY1x1MDAwNVx1MDAxObAufzDZMXc5lldAX1xyl9PRZ66Hx+VIemFwW3bO4W9YzydcYlx1MDAwNLRuXHUwMDEyivMnr9dw5mAkoMYtXHUwMDA20d9bRbIwX2vtXvDRq9/3e/taXT5cdTAwMGKzXjtbPnr++bP9xVWkXCLAXHUwMDA2XHK8hIV+m98+ilx1MDAxZn3Ab5dcdTAwMDTJYV3vXHUwMDFmx/3vpVwiXHUwMDA3ZjebuDNR8Tn8dpBSilSSXHUwMDA1P+i2z+evJG7SO2bAR1x1MDAxZPZcdTAwMTL8u9mn9VFX/Z3b/G2eeknbWSj5tFx1MDAwNr4wR9ta9CVvvstcXCiZzHL291x1MDAxMYe9NLbMudt/N3c9ILZf5Fx1MDAwYnd3/W1tp6d3j5a3V43sLN6th/um+tWTXGJeqkwvNFx1MDAxNeJ0yvR84fL981G681x1MDAwM+458bV0xP6gP8bH38r4sOhsOoyB5ay7nFx1MDAxMnA+XHUwMDEx84tkXiXhLCQkZdw9nZ5tXGaBSn91JKBzXHUwMDE39CysXHUwMDAwnDOdNLRMdkHAg+NcdTAwMThcdTAwMTVcdTAwMGXfiVwiXHUwMDAzJsld8F1qTtYzNCrYXHUwMDFjXHUwMDFjubVcdTAwMWa9xz+D7Vx1MDAxNfTPXHUwMDEzPMehg5lcdTAwMDaCXHTZb1x1MDAxMHfLhi6NXHUwMDA1hEZN942y6SG0LUlxV7jLXHUwMDAw0ewyqkJQxDBcdTAwMDHtdFx1MDAxOSld3qe/mnqiJOFcdTAwMTiVwF0/XHUwMDFktV6jjerz/fLGWnf7Rv7s73rb4Vx1MDAxN9dP2cK3gCPaP0MtjdeojFTRxG9cdTAwMDfBYVx1MDAwM47wtPjj+f69lFx1MDAwZlSFIFCrXHUwMDE5wIxNqFxuXHUwMDBiayYp9envONW8sVx1MDAwNVx1MDAwZqtooVx1MDAwNsLxX1x1MDAxM1+nrKlcdTAwMWVcdTAwMGUjd3nrwf9giVCgfS+2oCfll2+NMryi3CrWXGKsPyFA7S/m2oRfXHUwMDExXHUwMDE2XHUwMDEy1rhcIrXNPlwiqDLqgtGr811hWNFcdTAwMDTIgl5MsJZcdTAwMGLRXHUwMDBmWd3F3OBcdTAwMDZcdTAwMTRcdTAwMWOqII4wz7WBheR8PHZcblx1MDAwYj1cdKZcXPh0XHUwMDE2krtcdTAwMWJ9/1xcd7fwMVx1MDAwMpq9i+JkPPOMijNZzlx1MDAxNX5AXGZ8lVbKcX2aNlx1MDAxN4ib7nNYgbO5YFx1MDAwZevXXHUwMDA33y+lWDjYfO72Vlx1MDAxNqthsPf36qX0/d/XSykjT1x1MDAxMYz5XHUwMDFkXHUwMDE39dP6JFd/PF1cdTAwMWaELXkt/Jfvty839+eRV3Prk/zXrHXvfqxV1XHz6CiMfl51ulx1MDAwYsvH182FXHUwMDEy1j1a+35ysrroPX8/eeu+LpxvXHUwMDE5U2t90b5OOVx1MDAxNlx1MDAxMEmHi4zH4Vx1MDAxY5F7XHUwMDFmyplejqJcdTAwMWZP50/bkd7brG6d/Ng50e/w15ft6/TDPOznj3d1ju9m1IkmMoxcdTAwMDZcdTAwMTmuQlx1MDAxM/nTzfGvyGjzXHUwMDEw7ohAPtJccrrcbd4uXHUwMDFl/VVrdl9x6v95t9J8arIldGqD6KhK/Jc0iL67t5m8+p7rPNblm4nsSkIyXHUwMDE2UIWbneD7eVTfeljvbK1s13z/4rG//bU953TPqFx1MDAxZn6BnlFoQ8lcdTAwMTR/Xs9of/tqebVX7dXD1cfD15Xbn0+rqvPHL1x1MDAxZf2QZ2P+f9BcdTAwMTI6g79BokQ2c1fFl9/P1jbrS99X3rxLs7G/dHnR/7H0tfl7dlx1MDAxNVx0juDzq0iUP1x1MDAxZYlcdTAwMWJcdTAwMDEvyIrvT2Q9M3JAwKuy8Fg5cqD97aHRvj/bWltorMigt3149HzR+yNcdTAwMDdGP+Rx3oJiwVx1MDAxOXuENPxm4032pX3+x3XF44QjuO1Jgn7i81x1MDAxNa1CzlpcdTAwMGVcdTAwMTM6cVxicGBFZjfeSbjLSaJ3yd/PXk9UWKj5u1x1MDAxN5xxhkSY9Vx1MDAxY+tOZ15mlmtcdTAwMGJJ9V/+cVlcdTAwMTGKXHUwMDE4cSqc0ttb4FRcdTAwMTKSXHUwMDE5JefkfPeVs15RXHUwMDAyLX25XHUwMDE5p/ZcdTAwMDF+/Fx1MDAwMimy9+1cdTAwMDAp6Fx1MDAxNyrlu4PDXFx0up295Z3ut62lh8fn9nVw8r32IfywX9lxYSZpNGVcYkTvvPoxQ+C9oNigUkxkOtCKlJRcdTAwMDZe4ElvrLXoXHUwMDFku2Bz+ftlfX11vddYfDleO2w/bVxctr//sVx1MDAwYkY/lMu3XHUwMDBi5fd6ll+dNqjQjCSHXHUwMDEzSZNGXHUwMDAwZeVcXChNpFx1MDAxZKd6XHUwMDBli/eGXHUwMDEwXHUwMDAx6bmUXHUwMDFm7cObvsOk9lB5RFx1MDAwMXVBTnerjXSC1fxS3Z5lb6ekY8qrXHUwMDAwdr+4XGblzEdXOeXSRWi+bKYsX258bYMjXGLCXHUwMDAwXHUwMDE357tHXHUwMDE2+96qemuerO+cvC7W6m83r1x1MDAwN9fy21x1MDAxNzc4ZkZcdTAwMWX8XHUwMDEwXGb/ObBUOfGGrMc1sCtAgVoqnVx1MDAwYmxcdTAwMWFcdTAwMWPef9+6udz7eXx/bqpnqz9ealx1MDAwZlx1MDAwN3/MitFcdTAwMGb5Kunrh1x1MDAxYlxi92SSSVx1MDAwMC4rOoRcdTAwMWJcdTAwMDZcdTAwMDAs+UPv/23iXHKjV+e71CzzXHUwMDE2kum//ONOYVx1MDAwN/fD+T3RXHUwMDA3d3otf738+ENcdTAwMTFcdTAwMDb92uZcdTAwMDBnXHUwMDAy+aHw3HGonlwib69/83h9uyW2aucrz5e3q+LLIz7Mij/4ka74c9frllx1MDAxMXWY8p7EPGArSSTCvGTETrvRvNre/tnarXtnjYeX7Xb3cv+PdTD6oVxcZv23XHQ6XHUwMDA0XHUwMDFjYVx1MDAxZdrZPi47/Fx1MDAxZEFcdTAwMDdI+CCKmWPOMyw56kDAT1x1MDAxM4NcdTAwMDNcdTAwMTWiroUs1+erpnL384vCXHUwMDBlXHUwMDA1ru7Xxlx1MDAxZIqQ/Z+4w1/pYrEplob031x1MDAxZJWiNXSYXHUwMDE3XGJ3S2P2OI0vWn04Xs+bgGW8a1kooeDzz1F9OFx1MDAxYYw3MiamXHUwMDE0XHUwMDFmSpw7h7tOtVx1MDAxZeYqPpzPLLBKf+nqrn1118Fro1x1MDAwMsZ/nMffUXWYmENKuG8921x1MDAxYoPpbnwtx/499q5O84H3kfxiWPFL41wif1x1MDAwZsa87H172V7c//69dbZ0cfG0f/PtZdpcdTAwMWVcdTAwMTZcXDYhM5so2UJcdTAwMDLdXFylavBLtZPk5EjG0uSHmjFqXHSCNVCFalwiv1x1MDAwN52F08bOjVxurv2TteejjVx1MDAxZrVW66tcdTAwMGKQiLD5RoQ60Fx1MDAxY3xcdTAwMTiM3KS4tzCqaLhsnOiK10aNv+VcdTAwMGJcdTAwMTdcdTAwMTlWXCKPcVx1MDAwMo5C9MRcYul8TNZUOLBcdTAwMGWXho0o/lx1MDAxOdvOoJ5SiSDyjJpcdTAwMWXY/I0+iaPwyWX8RKxM3plcZsfU+Sz59DFpXHUwMDE06OXr40VzcHm3WT16UP3m3fXZ9+ymZEVIeLfM/Fx1MDAxOK28QIXTN6U9Y+hfgp6M8lV2U3836fQu6fLPQpZqSzN/ZJD+7XikJVTQxe6VXHUwMDFlu3eXL+bnTe/irnb2cHDRP1tcXPR3/lx1MDAwNuJrQmBcdTAwMTn1ifaPdLJ/XHUwMDA0p6ByatzfVFx1MDAwNHWXr8PX/p63s/l01N1bPDxoP3eXf7H9s6V6+4ftnVx1MDAxM1x1MDAxM9aeNm9cdTAwMTZuZeN462T6XHUwMDFl4NRcdTAwMTDpb/Tvf0PzR36O+SPHkGbS8sPiLFx1MDAwYl1cdTAwMDCb91h+u1xcelnff7xcdTAwMGW+v638eO5883ZcdTAwMWW/uvyA7E5cdJBPdKCmNG9cdTAwMDXZUvCIUVx1MDAwN+O9XHUwMDAztPv15UdcdTAwMDHeXHUwMDE1XHUwMDExSIx6MdBCyjG1mXDuIPlUUHrcXHUwMDFkXHUwMDA2tbP1i7Pt+8dFs+m/NqvbP1ff855ytlCK8JhcIiB+sVximXj3+Mz5OSXIjP5q5fmBYFx1MDAxYqKzXHUwMDA0aXV+Pt7vr3eW6t+6273g5S3UO1x1MDAxYn87XHSilaiMW4PpxNNInsjIXHUwMDBm2qpcXHlcdTAwMTJWfI6i96W1xad0mlx1MDAxMFx1MDAwYjjUvpxeUfr1xUuuMzJcdTAwMTIvMvXHgbnLtU5+lXz5ncbJpGRJk19Zgma8gixcdTAwMGLkXHUwMDEweVGkPXdT5WCvv7BcdTAwMTFF3e3tn1x1MDAxYi9Hy1x1MDAwNzvHjW73y1x1MDAwYlx1MDAxYZU2VWbMxZ7XVFx0XFxcXJ1cdTAwMDCELcx747E/TZQoMVx1MDAwNsHzqyyVz/J0Tm6+XHUwMDFkXHUwMDFk9Zs/ZKf2tPTz8OXH4+r316l7+PdcdTAwMTNcdTAwMWTB57g13vuYXHUwMDE0XHUwMDEwSlx1MDAxME5aKXej5P518WpTXHUwMDFmmFZt/apx23xcbvty7T1Z8UVAX6SWUSWKhCBmr+dcdH/EoNZAiaJcbitMYFxieFHgjZXrfECK/I9cdTAwMGL7Z1q0xK9cdTAwMDT4cphCanJM6lid6uRGTCaeS9TfQMpf7FxuUcCMtjuHgHFnbpyDz1NSKlxmPOV74Xguej5rZXdp+eV26f60c7J8Ka7EZvP8+9rWe9aKMVJcdTAwMWJcdTAwMWGuIbZcdTAwMTPI8amIyS50RftGJMhlJrOlv5lcYmLRRVx1MDAxOErPh3LVkVbRZKI9S6F5XHUwMDBiSmkqRsPyMZH2wXkqvWBYXHUwMDAxTSstPW1CXHUwMDFj9lx1MDAxONbXvFx1MDAxNtK7uSywMVxcsajI+Mer/afF+5ud7qrpNa5frs8un66aN19d6ilZUYpzZ/xcYn9HXHUwMDBmm8R1Klx1MDAxY9PFKe3CiOh9XHUwMDFj5/mEXkwvwz8j529C6ilcYmXJYpBAhl7GR/MkRLTnvdP0928k9mz2miN4tFx1MDAwNXj3XCL8MJ7Jmkvura88rtXWg1x1MDAwYtlunzZcdTAwMGWv1k9Wl45u31x1MDAxMb4sjpGRJ1x1MDAwM1x1MDAwMz8tiJSL8P37Sbpx5lx1MDAxMNqfnCWdocp8SVx1MDAxN1SCwFfQXHUwMDE3gmo+SpWxh1x1MDAxNfCcgsFlXCJcdTAwMWaKZKzVaj5BN15Qm+lv9uCRXHUwMDA0kXZcdTAwMTd0s8HWvqSgS9f8XHUwMDA0Yi4/8H9E523TbGWFmdZTXHUwMDAyTFJn3UBfe1x1MDAwMtv+XHJcdK+RYTtPzn0mrGPKXHJcZjxcdTAwMTn6oYlI2cLLyonPT3hhXHUwMDBmcEE1tmDAYOFEKd+wPMBcdTAwMDTCXHUwMDBmQrxxXGYx/m8rusZyqVx1MDAxZnn/XHUwMDAyKCXvI2O0nv2Ik7xqXzVv78er18Yk1lx1MDAxOM+kJVx1MDAxNlx1MDAwM1xuXHUwMDEwWJF7mdFs7folJZb0Ulwiy8wpst61v9RcdTAwMTSRXHUwMDE1ZiSWXHUwMDA3cyPwZfiBXHUwMDEyxTyJNaSa/1x1MDAxYSOnXHUwMDAxlsabt1+re2/bXHUwMDFiwfp6KJrH57UrR2DPf81ad3aI4uPrznZcdTAwMDI+vu7s8OvMdVx1MDAwN6w4y4xVgZiqXHUwMDE3ZrLvu1x1MDAwMKf6XWsjUL6OYFC5XHUwMDFiXHUwMDFi1yf7R9fi7qF5f/lk1FlNt07eZd2vXHUwMDEzd2ZcdTAwMTHgJHSi8VQudOLHY8/hNKcpO3KAx1x1MDAxZqrfUGU82+j4XHUwMDEwXGJp9fGvtavu+V/L3fPm3f9cdTAwMWQ/uiH06Fgl16+AXHUwMDFlTe1oJu9cXN02O1M7XHUwMDAxvXc7XHUwMDAxPWPgcXiRO+9cdTAwMWP/2FxcuG3sLW7t91x1MDAxYa27zaXX1uGp+dpqL0glbNT7tSVTXHUwMDE5ooixXHUwMDBlI6JcdTAwMTKN/5lcdTAwMDLJ7cmKnHiPn2YqpelcdTAwMWGG78BcdTAwMTD+XlP+6Tn+nubL+eQ80/PYhD4nXHUwMDE4fqvV9MIzeS7brchvXHUwMDE5ziVRQVx1MDAxNLRE0PZC9t+cn43RXHUwMDA1XHUwMDE45XxCaY9cdTAwMDXrXHUwMDA2XHUwMDBl/2yr7z21XHUwMDExhe9RfmC8yNPKuFx1MDAxN2bWotXgaOFFXHUwMDA3W0+mttp9W9bru1/dRVxyMlNqtGFqWEkjw1xiXHUwMDE3MVx1MDAxN0j2u1xcXHUwMDEwTJnbmsXHhoXpqchcdTAwMGKj31BcdTAwMDPxXHTK4/Dx/Od/3lx1MDAxZD5075vtWGpPVSDvYVe3sPXzn5+gQqbs62Mm2IyZT/DDPU9cbunuPkU//ePFy97Jyn5gzOX1yuvy8v3a1+amMFxyMT97iMOHuUfqKZbXXHUwMDE0eHnte75cdTAwMGZG/lxyXHUwMDE1ip/APsuX562bvy7uf/7VvGv/1b5/vSPB/uddO1x1MDAwMVv/K97J49dgKufdfozVzCzsyMhoIVxujFwi367d3a9f3dSa1+ubZnP5vFx1MDAxZjRaXHUwMDFmXHUwMDFhRf4ri2zEJK/pXHUwMDE5RTZzaaopXHUwMDA1NlM0XHUwMDE1w+fhe/DwfzdOs1x1MDAwZcWz1Vx1MDAwN+cg2SeQdmecSX7foIV3dvZBdfVuXCLW87RvtC5cdTAwMDB/8tp9uzXrl7c/ji+Pb5/9u+efP9ZcdTAwMWa+OFx1MDAwYo1X4sWm3yexkO/CQr5cdTAwMWZcdTAwMWGYnVx1MDAxZmlH/oIsVLt/Of/Pu1x1MDAwMaX+dfFljL1pXHUwMDFi+1x1MDAxOPtE71x1MDAwNstcdTAwMDNcdTAwMGZ2eyhcdTAwMDN316l39Hx2c/ij4Z/s/Gw2NlYuNlx1MDAxYceLX5590uG2WVx0vs9noEhcdTAwMDWB9MXXi1x0/GGg6Vxm9H6pNFFPpfJcdTAwMGJ4S6q+2L0/O3l7rldcdTAwMWKdXHUwMDFiffByeXt/8cVcdTAwMTkoUyetxHzR6vdcdTAwMTloyqT2bKRahlpBcJl/XHUwMDEzXHUwMDE1tN9q3v21d/743H2ayjm/OFA9vp2p/Fx1MDAxMlx1MDAxM/KPVbl9ps+Mvt/oXHUwMDA3a1x1MDAwNz+qQaM3hmP/Tig7XHUwMDE2yCmXwFx1MDAxZksyXHUwMDBlxz1cdTAwMDWVSCkhXHQrXGYnKpiCXvD+W7J0/NHo8IW88C4+ODLvI1x1MDAwMHmjz0zn0I/mZFx1MDAwNu6P5JROXHUwMDAzep5cIufUrI6QUETaScylOWqC1jI8XHUwMDE1RoFcYnJr5JJI9cN5XFz1MX5cdTAwMWJJrPrMXHUwMDBmm+1QKHFcdTAwMTHpli9kcHbWPpctKc9aMmiGrfaZ32qG/vhdfTxWnVxm57uu+y+N8Ez9qD9cdTAwMWTt9q9vtlx1MDAxYq9cdTAwMGZcdTAwMWZjXHUwMDAwPYVcdTAwMDGm1Vxu6Vmi+lx1MDAwZonHhOUxhVx1MDAxY0ZjlaJjqvx9XHUwMDEyN1piXHUwMDE3pnxcdTAwMTLHTtSYXHUwMDA18WFcdTAwMTLXbc9rn11II6Pz8+hCXHUwMDA2Klx1MDAxMEaqi3NPeP5cdTAwMDVcdTAwMDSx34p0ZNpcdTAwMWYj8f9Ialx1MDAwMP7RfHjYx3b4uZjg//Fydf66NDvl/Fx1MDAxZlx0k9jtPo4+6pxCXHUwMDFhXHUwMDE1cv3j9ur2/GCcef7n40vnn2+3Yz1cIldcdTAwMWbMTzGmd7i3xVx1MDAwZvN//9fE8v+bKtfX/9rZqKtGb0mfXHUwMDFkvz23+uKqubEnWiv3L1te22v3jFfrmZfWbeuldr34WluO+u3b1lV1vXuzs7+5caaiu7P1o4td9fbSPt67OFvHz71qp7G+Jk735fPpseyO3nfYid+321x1MDAxObyvfdvttsXmy/mKuKotL75WV1b728u6X99f7NWXq//c2Vi6bK93OlxyvH5w0DFb1y25tbKqt65Pe7tcdTAwMDed51r/9NG+/+r1dWtl8bG2/6pr+7qH9+Bnvl6zr9d6Y6/3tMLP/a3r7iVe69Xxu63rqrSvL7++ba2cPtdcdTAwMGWqT7UrLbaXXz1+19ZK67l+XeXrWGf1XHUwMDEx39fD783Byo3AZ/XWyuFz/eDysr6vVX35VeI1kaz3unWwi9dqXFzvXHKvKby/Z79juN7iU31Zy3pcdTAwMGbffd1cdTAwMTG7XHUwMDA3eK3fwXdonEWy72W7bz7nW219XHUwMDE1a9S0XVx1MDAwM++rXHLes6917epcdTAwMTX7aYn4XHUwMDE57Fx1MDAxYW9ja+C1Q1x1MDAwZvt/3l7Z5WtcIt7P7mivK4f2uWu33Muh4HvrxzjvlcH3rPJ1jb3i+Vc93kH9usUzVvWxM97e11x1MDAxZc71jb+vdVx1MDAxZuq1g8VXvL9n1+t3j2u8u+tGdfvg8lx1MDAxOPv2to9cdTAwMWWekv2/1ZbxX4VnXFw5XHUwMDFknnfNnqvA/muPOGOelYyfZXBnu3jeU67hxXexat+HvVxm9oTPrsbPYz970+P7tlx1MDAwZqqT32HfZ79Dx+/rjL7jXHUwMDAwn70+fMRd9e13rLT4PjF6bpH6jsP4fVx1MDAwN7Xh2eGzb/UrgbNtL+Eu1Wj/q6/4foP7eMP58swsveA8Xk9BP8n+x+/6NaZB0N9K7Vx1MDAxOf9cdTAwMGZ6Plx1MDAxZL6OfYF/+P/vfVYkn8XrfI5l/G7wXHUwMDFjy9zfoto6qMbn08N52/VcdTAwMGbViKZcdTAwMGZxf7uPtVU87/WiN1hn+Fx1MDAxZFx1MDAwN4vCrrGySj7pXHUwMDFk34pcdTAwMWW+9y0+l1PRXFxcdTAwMTa9o2vS8anB/z/Xjlf7MW/jWfqHI1rbtzz4XHUwMDE20zu+g3dcdTAwMDOeXHUwMDFk8TOfY1x1MDAxMfx7KGNcdTAwMWHo8PVcdTAwMTHN71x1MDAwYqy7anh3yWtefXnAI6N7rVx1MDAxZOC7yF/y1GuuVPHzmlx1MDAwMn+Y+jr3v2u28Lv6ys3o+a5As/s8/5ayr2Ff9t6GZ2j5g2vz/Fx1MDAxNN7L+zHD81x1MDAwM43X7d535dF1+97eNe683iN9YFx1MDAxZrereJ6xc+jx+3gvrVg+XFxb/k3u2NL3W1xyfFxiuYW9bF7yNStcdTAwMDNGcvHN3lx1MDAxZmkppmFcdTAwMTOfw83oXHUwMDFj7NnfWFx1MDAxZYr5oGXPvD6UMat8xlx1MDAxZfYo8ZyknXHekfE97d3jPiBcdTAwMTdX+8n+PNwzeT5+xqPTNytzbztPte4pn1VtXHUwMDFmd574XHUwMDE50Pnj6Hn4rIfa8pKlsSl7Oajh/GpmoFx1MDAwZkBjkIeH3L+B/MB5V+0z1cZp/1xutGzXxuuWXiztv41on/RAut+N6cyeXHUwMDAz11x1MDAxOdC9lX+mZvmh2o/Xr1xy5fjY+jJ+7Yb339veXHUwMDFm8lYvplXS3OF73/GYfEdcIk+4z90x/rV8XHUwMDBm/TdtfdBBXHUwMDFmNNDH+0En9etus3q11G9vdFx1MDAxZlx1MDAxYlx1MDAwN+Kqcdt9PFu5v65cdTAwMWafKuhOXb1cbv+5s97qNI93o2o39OonnV59Y1x0v1+6OT3Zu9w6Npdnx4dRXHUwMDE1vHm+Ulx1MDAxNa2NztXO9dsrXruvruMzN8LE/DHQyTfgXHUwMDEz6GTKxVx1MDAxMe3hvze4m9XB7/mZMdl3M+AtrHHzRr29fbA6ds+Q0/aZXHUwMDBmPdBcdTAwMTXlirFn0m+QzinjIUdcdTAwMGXHzlx1MDAwZnRiZWynt2vP4ObR0tn+OG+SnrintcvkNTXBn+Cdep96XHUwMDFlvNCzOlvGOvtwJGMhS2rx90BcdTAwMGZSXHUwMDFlnsZy92p0XHUwMDE3tFx1MDAwN/BcZm/79lx1MDAxObvHoH1RV1x1MDAxZDxng7ZcdTAwMDf1u45lW3JcdTAwMTagxZq1XHUwMDAzXHUwMDBlTWzftGL7ZqRb32hcdTAwMDPgXHUwMDFmXHUwMDFk6z/o34PW8Kx4vttDvXt/Vd2oi/PjN9pgt83jt8ftq5qoXXdk43r3aquvw1x1MDAxNuy05vJcdTAwMTJtuTruXHUwMDA3a1VHMiTWR3IoI/atrHxcdTAwMWLoxKmvr1xmXl9qnln5XHUwMDA2nbROXqzF/Fx1MDAxMMv2N2vzXFxccmyG5PeUv/vJnVu75NSuM41+XHUwMDFix6tcdTAwMDK2nbT0O2Ejwpa57vRcdTAwMDd655S0Q16O95rIKvFWi/X7a2xcdTAwMDOkX39cdTAwMWS+XHUwMDBlmUKexlx1MDAxZC5dJvtLniWha0tfViZNe8aY7rDu8VW10/L2XGZs4Kh623g4W3/1q6pxdXpbe4Wd+5LiKdg3XHUwMDFhNNGGnVx1MDAwNLuz37iObbfd3tZBrGti2Spw9q1+TJd7vC/KbVx1MDAxOevRgSxcdTAwMDNd9nefrFx1MDAwZV8n3dfwuzX7LLFcZoNcZlx1MDAxZNK81WFv9fXkd5ArMX1cdTAwMGbkXFzVrlO7O4W87qj9XHUwMDE1yLHrzaXYprGyaoynXHUwMDBme1x1MDAwM5lwenD6OCFcdTAwMGJcdTAwMGVWwZe71v618m/0mqxb2/3S6lx1MDAxMOjFhIZqsVx1MDAxZHXdWOK+Y11aXHUwMDFi41V8l+XPLp+L9lx1MDAwMl7f1SN5MKQvXHUwMDE12zG7sZ2xMuLl0d2evu1cdTAwMWWk6dGuI1x1MDAxM1vP2mf1o2K8XHUwMDA131x1MDAwMd+H77zeXHUwMDFi2r51ykrYwrSHptJHvyZOXHUwMDBmOtC1XHUwMDE5+vBog1NO4Pxw5i3SPGWwmjxr0Ie1TaxcXNI1S1x1MDAxYp23cdrYXrlcdTAwMDFcdTAwMWZaW7VcdTAwMTfbqmP28MFcIm0xa4dur79iz/SBbp7i8629nfKcaPP1xm3HWDfFPsYm74s+Rn/Sx2j1XHUwMDEyXHUwMDFlxb5cdTAwMWK8Y1x1MDAxNdMl7S67V8hF3ntcdTAwMTV0UiX9ki77Q9tcdTAwMDCyYXvf3qWZrmNfldVcdTAwMGJX9q5EfW3aXdW7sDf6uGd7V1uq9c+d2Lf951hcdTAwMTD55/lYaENcdTAwMTH3PFxug2A8RuZcdTAwMWWI+4jHXzzK91x1MDAwMY//4eZ0wutfkq3b1+czb/NuS+1db6mjx1x1MDAwNrz4s7u9/lx1MDAxNjREbT/EaV4+na2b/vZt/Vx1MDAxYSd6397Ye92+XG5fTr3NLqj0oX17dH2m5NOZMv2t26jX6EXPLfD58HN3mzeN61x1MDAxOZGGg1x1MDAxYrO9XHUwMDFmvtauQnxK9lx1MDAxYeunTy2v+9xeX9OwSPrVXrVzvi5cdTAwMWbP7mp+y2vcje9cdTAwMDEreVt3reR78flcdTAwMTV4nlx1MDAxZZ93+Fx1MDAxOXDYpWhvLPpbvVxi7249t/u1+Hn71Ve8/4VrQutcZs6nf6b2XHUwMDFlWuvRTfNgfM/1l8Z695Wvbd3VX9onm9BKXHLsv93dujXd9nK0erS6+9JS+NzJXHUwMDEy3lx1MDAwYst62dy013fHzq/73PTAnydL3cwzjL02OENGU1re0uWpOupvqdHr2KtqnGz2m8fR885+ldYnvqPx0DhpL595nahcbm9cdTAwMGacRc9cdTAwMGLnXHQr9WDV0DuurtRe7T9XS17zeE80XHUwMDE5hekvXlXXL7vN4/Z9e/izjfaQO7DOrqJGXHUwMDFlncnDzZmqXHUwMDBmXCI9VkptXHUwMDFkr/Vat5G3ddy4XHUwMDA0t4GeXHUwMDBlcX97l+1ccuz7Lr6L5rH52VL1y9b6oVx1MDAwZnrptVT35VxmNEHvXHUwMDE0nN/5tn6o67c1Xe8v4p+bx+pcbu7mXHUwMDFh1je9oYPDh+q1/lZdXlxmz46PxOkx1l5fja3YW9lcdTAwMDWdWOtcdTAwMTXvl7Xl6j+Xr1x1MDAxNjt8b+t273a7u7m6XHUwMDE3f5a/6+ys16+3u23c22PHvn67dnXmXHUwMDFkXHSc49VO574zeF915VxyfPJwXHUwMDBiOnk6Pdn9Z/NYXjbUoaWVb1x1MDAxZe5z5Vx1MDAxNXdcXPNcdTAwMWK4q7PjNTHls+Kcd7VB2n/oNU5cdTAwMTKaOZjFe3vXZ8dd+7ktWVx1MDAxN5RcXPvx91JqXHKfgc/G726vd1x1MDAwNTTIy9h3Q7Jccp9veFx1MDAwZVue3cP+3uqp/Vx1MDAxZCTfU1x1MDAwM+dlo3ZcdTAwMDfxuY7RrX92u/bUON5TzeMjr1xua6uhyN9vLy3cXHUwMDE3rJhb+1x1MDAxN1x1MDAxYeyUdLp+1DtV0eOZV1x1MDAwNd3V8O2n/Fx1MDAwNzS0iT3sdUFcdTAwMTevp8f1h/bGXHK8XG7Q6Xp01YS8XHUwMDAw7b+c8bPHxp5cdLRcdTAwMGZea/dIl/gufG7t+VTRXHUwMDEzWSW93rWPuzfY85TPjPhi+87u9Vx1MDAwNZr4unmyZ3Cn/OzD2e1T/1StvTZcdTAwMGVcdTAwMWWwl3a3pS7x7JGH13up18FcdTAwMTfm5sxrPbVVXHUwMDE3vFx1MDAwYl6CNVx1MDAwNE2Y+p42PrP30u7J+8Zx9665sct99qCZXHUwMDA2vGP5o2F50vJcdTAwMTA9rH5cdTAwMTPf2fA2XHUwMDFmaLk2btdcdTAwMWVbuNfqeuOhvSxBY5t3zWP91F6PXpN93zZPdp9AW71cdTAwMDZ4f1x1MDAwYtqsccfvWcx8pnU72EP2NdyRwJpPU87CP1P291x1MDAxZayvXHUwMDFlrOu37YPTyee8rWvKl/r+JP+eevYu5XtnXHUwMDE3R3dTPI9n4Jlvndwk+5x6ntj35Vx1MDAwM3jAb1x1MDAxY+8m9DKxXHUwMDFm2brbhG7CuayvmcZcdGiO8qWPPa6cXHUwMDBleFx1MDAwNLxxXHUwMDA0ybVcdTAwMTSfM/9cdTAwMWav12IrLX598Fx1MDAxYTRLfVx1MDAwNXvZ2CNN9S0vg67aXHUwMDFim5dnd/VHyJTut2XhMapcbk9wIIPI3yPr7FZ0YMm8wkqnddXbWoa3cXBDmfxa31+6rtLjWIktsvrVXCItMnqI+G9NVWm9XFyvMmLRia2z4fso82y0e/hz/D5YO/Ck7O9en1x1MDAwNq9ccn5OPtOBRTR4fyf1Xnqo/bGfXHUwMDE5pWNEXCKmN8hcdTAwMWLc93VjpUW9aHi/PCdr2a7gXGb7rYxltXU85G+/dvBcdTAwMDTPbfOlqVx1MDAwZSFDoufG6OcnyFx1MDAxYdA/9cSa2b41L2e3h1x1MDAwMXRE70w9dSfW2K9cdTAwMGXl2TBScdPu4f7vm8f1XHUwMDBi6LJevZe1npPv+6w9XHJk6dS7315ZZEQjuXtauzfQt4uMTMktXHUwMDFiXT3s2DPnXcX/5e9cdTAwMWVthHmfUdPTzvjv+bnqslx1MDAxOPxeVeM1Rr/HP9WNe8vreHbI3Xosk29PXHUwMDA38sfuXHUwMDEx9y9qy2PnuVx1MDAxY93Z/6fuXHUwMDAyL+RZwMxfXHUwMDA3XCLwxIRcdTAwMDXsnKf7iFx1MDAwNVxcPFx0+MdcdTAwMDL+Y1x1MDAwMTtYwFVTW/6oXHUwMDA13Fx1MDAxMs5cdTAwMTbwSV3C/sGea7/LXHUwMDAy9rb/WMB/LOAvZ1x1MDAwMbfUXHUwMDFmXHUwMDBi+JMt4P7uTFx1MDAwYrh+UJ1qXHUwMDAx11ZuPmJcdTAwMDHfXHJqQkCnr8317vVJf9Va2ZnYW2JZ2Vj+slx1MDAxY9Lm9vXq0NrKWl97l6RRPOvl+cHDM/Rqd9urXHUwMDBi8NLPxv7EXHUwMDFh4zJrPFx1MDAwNvtcdTAwMDRLXHTPdtpnrLRmreOqts+xctg57VxyLHFrdVx1MDAwZqzkxDqG/lxcoU6pvlVtzH30Plhs1nJcdTAwMWb9XHUwMDFjv29rZXFowSf/XHUwMDFk+3lk7Vx1MDAwZt4/8FxuXHUwMDA271x1MDAxZFj7w5+H1n61XHUwMDEz50Agd/pr3e31w37D0lwiaOPO5kGsnmNeZCjrVGv4/4N73vM2QYOXXHUwMDBmpzKEhVrtZ3MsyVx1MDAxOStrUT6dWZ1cdTAwMGI5fHD/Njz37D1A59TvwWewzm8y1vX4XHUwMDFh1XH9M5a/OaOVfL3o2dz7SpVn1atfM3fWkfHZt+yZ1Hu0jHd7sTW926va2lx1MDAwMJvfhzewaFibgtfsf6vMITO3sa9F7WrJn/BsXHUwMDEyOznt2dSvOyP9kljHw7O8frU6b6fzf/7PTEs58Ew0LDb77//47/9cdTAwMDeF+CBcdTAwMDYifQ== + + + + + + + + + + + + + + + + Malware Scanner + + + Cloud Run + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Unscanned Bucket + + + Cloud Storage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Clean Bucket + + + Cloud Storage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Quarantined Bucket + + + Cloud Storage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Malware DB Mirror + + + Cloud Storage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Eventarc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Cloud Scheduler + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Users + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ClamAV Malware + Database + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Is File Clean? + + + + User + Uploads File + + + Check for and download + database updates + + + File uploaded + trigger + + + Move + uploaded file + + + Move + uploaded file + + + Scan Result + + + + diff --git a/cloudrun-malware-scanner/.dockerignore b/cloudrun-malware-scanner/.dockerignore new file mode 100644 index 0000000..8132d33 --- /dev/null +++ b/cloudrun-malware-scanner/.dockerignore @@ -0,0 +1,7 @@ +cvds +pyenv +Dockerfile +node_modules +.dockerignore +.gcloudignore +.eslintrc.js diff --git a/cloudrun-malware-scanner/.gcloudignore b/cloudrun-malware-scanner/.gcloudignore new file mode 100644 index 0000000..da72999 --- /dev/null +++ b/cloudrun-malware-scanner/.gcloudignore @@ -0,0 +1,5 @@ +cvds +pyenv +node_modules +.gcloudignore +.eslintrc.js diff --git a/cloudrun-malware-scanner/Dockerfile b/cloudrun-malware-scanner/Dockerfile index 995f1e2..627b368 100644 --- a/cloudrun-malware-scanner/Dockerfile +++ b/cloudrun-malware-scanner/Dockerfile @@ -1,34 +1,84 @@ -# Copyright 2021 Google LLC +# Copyright 2022 Google LLC # 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 - +# # https://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 node:16 +FROM node:18 WORKDIR /app -COPY . /app -# The setup script both adds and removes clamav. -# This is so that the clamav prerequisites are installed here -# but the package will actually get installed by bootstrap.sh +COPY . /app +COPY config.json /app + +# Install apt and pip3 requirements. +# GCloud SDK install taken from +# https://github.com/GoogleCloudPlatform/cloud-sdk-docker/blob/master/debian_slim/Dockerfile +# +# Note that section this both adds and removes clamav. +# This is so that the clamav config files and prerequisites are installed here +# but the latest package will actually get installed by bootstrap.sh # when the container starts. -# This is because a) clamav cannot be installed only when the -# container starts due to some things not working in the container -# runtime, and b) clamav cannote be re-installed or updated when -# the container starts due to some wierdness relating to symlinks -# in the container runtime. # -# https://github.com/GoogleCloudPlatform/docker-clamav-malware-scanner/issues/32 -RUN apt-get update && \ - export DEBIAN_FRONTEND=noninteractive && \ - apt-get install clamav-daemon -y && \ - apt-get autoremove clamav-daemon -y && \ - npm install --omit=dev -CMD ["sh", "bootstrap.sh"] +# This is because +# a) clamav cannot be installed only in container startup due to unable to +# create some symlinks and config files in the container runtime. +# b) clamav cannot be installed here, then updated when the container starts +# due to some wierdness relating to symlinks in the container +# runtime being the wrong size and causing dpkg to fail. +# +# see https://github.com/GoogleCloudPlatform/docker-clamav-malware-scanner/issues/32 +# +ENV PATH "$PATH:/opt/google-cloud-sdk/bin/" +RUN export DEBIAN_FRONTEND=noninteractive && \ + apt-get update -qqy && \ + apt-get install -qqy --no-install-recommends \ + curl \ + python3-pip \ + apt-transport-https \ + lsb-release \ + openssh-client \ + jq \ + gawk \ + clamav-daemon \ + clamav-freshclam && \ + apt-get -qqy remove \ + libclamav9 \ + clamav-base \ + clamav-daemon \ + clamav-freshclam && \ + pip3 install --upgrade \ + crcmod \ + cvdupdate && \ + CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)" && \ + echo -n "Adding Cloud SDK apt repository: " && \ + echo "deb https://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" \ + | tee /etc/apt/sources.list.d/google-cloud-sdk.list && \ + curl -s \ + https://packages.cloud.google.com/apt/doc/apt-key.gpg \ + -o /etc/apt/trusted.gpg.d/packages-cloud-google-apt.gpg && \ + apt-get update -qqy && \ + apt-get install -qqy --no-install-recommends \ + google-cloud-sdk && \ + gcloud config set core/disable_usage_reporting true && \ + gcloud config set component_manager/disable_update_check true && \ + gcloud config set metrics/environment github_docker_image && \ + gcloud --version && \ + truncate -s 0 /var/log/apt/*.log /var/log/*.log + +# Get the cloud-run-proxy tool +RUN CLOUD_RUN_PROXY_VERSION=0.3.0 && \ + curl -s -L \ + https://github.com/GoogleCloudPlatform/cloud-run-proxy/releases/download/v${CLOUD_RUN_PROXY_VERSION}/cloud-run-proxy_${CLOUD_RUN_PROXY_VERSION}_linux_amd64.tar.gz | \ + tar -zxf - cloud-run-proxy + +# Get all required node.js dependencies +RUN npm install --omit=dev + +CMD ["bash", "bootstrap.sh"] diff --git a/cloudrun-malware-scanner/bootstrap.sh b/cloudrun-malware-scanner/bootstrap.sh index 50172ce..0f83faa 100755 --- a/cloudrun-malware-scanner/bootstrap.sh +++ b/cloudrun-malware-scanner/bootstrap.sh @@ -14,26 +14,102 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Log commands, and exit on error. -set -x -o errexit +CMD="$(basename $0)" +export PROJECT_ID="$(curl -s 'http://metadata.google.internal/computeMetadata/v1/project/project-id' -H 'Metadata-Flavor: Google')" + +function Log { + case "$1" in + (INFO|WARNING|ERROR) SEVERITY="$1" ;; + (*) SEVERITY=INFO ;; + esac + FUNCTION="$2" + MESSAGE="$3" + cat < /dev/null ; then + Log ERROR main "ClamCvdMirrorBucket=${CVD_MIRROR_BUCKET} does not exist or is not readable" + exit 1 +fi + +# This function is used to update clam and freshclam config files. +# Use by specifying the config file on the command line and +# piping the config file updates in. +# +# Note: clamav takes the _first_ config value found in the file, so first +# remove any existing values for the parameters defined in the update, then +# append the new values. +# +function updateClamConfigFile { + CLAM_CONFIG_FILE=$1 + UPDATE_TMPFILE="$(mktemp)" + CLAM_CONFIG_TMPFILE="$(mktemp)" + cat > "${UPDATE_TMPFILE}" + + # Find modified parameters in update, and emit a '|' separated list. + MODIFIED_PARAMS=$(gawk '! /^\s*#/ && /^\S+\s/ { params=params "|" $1; i++; } END { print substr(params,2) }' ${UPDATE_TMPFILE}) + # Remove lines starting with modified parameter names followed by whitespace + grep -vE "^(XXXXXXXXXX|${MODIFIED_PARAMS})\s" "${CLAM_CONFIG_FILE}" > "${CLAM_CONFIG_TMPFILE}" + # Append updates + cat "${UPDATE_TMPFILE}" >> "${CLAM_CONFIG_TMPFILE}" + + mv "${CLAM_CONFIG_TMPFILE}" "${CLAM_CONFIG_FILE}" + chmod go+r "${CLAM_CONFIG_FILE}" + Log INFO updateClamConfigFile "Updated ${CLAM_CONFIG_FILE} with parameters: ${MODIFIED_PARAMS}" +} # Set Clam config file values # see clamd.conf documentation: # https://manpages.debian.org/bullseye/clamav-daemon/clamd.conf.5.en.html - -# Note: clamav takes the _first_ config value found in the file, so first -# remove any existing values, then append the new values. -grep -vE "^(StreamMaxLength|MaxScanSize|MaxFileSize|MaxRecursion|MaxFiles|TCPSocket|TCPAddr)" /etc/clamav/clamd.conf > /etc/clamav/clamd.conf.new -cat >> /etc/clamav/clamd.conf.new << EOF +updateClamConfigFile /etc/clamav/clamd.conf << EOF # This option allows you to specify the upper limit for data size that will be transfered to remote daemon when scanning a single file. StreamMaxLength 521M @@ -55,16 +131,36 @@ MaxFiles 10000 # Port and bind address for clamav daemon TCPSocket 3310 TCPAddr 127.0.0.1 +EOF +# Update Freshclam config values +# see freshclam.conf documentation: +# https://manpages.debian.org/bullseye/clamav-freshclam/freshclam.conf.5.en.html +updateClamConfigFile /etc/clamav/freshclam.conf << EOF +# DatabaseMirror specifies to which mirror(s) freshclam should connect. +# Set to the authentication proxy service which proxys to the GCS API. +DatabaseMirror http://${AUTH_SERVER_ADDRESS}/${CVD_MIRROR_BUCKET}/cvds + +# Number of database checks per day. +# Once per half hour, which is fine as we are using a local mirror. +Checks 48 EOF -mv -f /etc/clamav/clamd.conf.new /etc/clamav/clamd.conf -# Report options to log -clamconf +# Get latest definitions from GCS CVD mirror bucket. +Log INFO main "Running freshclam for first run" +freshclam + +# Sanity check that local cvds exist (otherwise clamav daemon will not start) +if [[ ! -e /var/lib/clamav/main.cvd ]] ; then + Log ERROR main "ClamAV database files do not exist" >&2 + exit 1 +fi -# Restart Services -service clamav-daemon force-reload -service clamav-freshclam force-reload +# Restart clamav and freshclam Services +Log INFO main "Starting clamav services" +service clamav-daemon force-reload & +service clamav-freshclam force-reload & # Run node server process +Log INFO main "Starting malware-scanner service" npm start diff --git a/cloudrun-malware-scanner/bunyanStdoutJsonLog.js b/cloudrun-malware-scanner/bunyanStdoutJsonLog.js deleted file mode 100644 index b120cb0..0000000 --- a/cloudrun-malware-scanner/bunyanStdoutJsonLog.js +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright 2021 Google Inc. All Rights Reserved. - * - * 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. - */ -const {BUNYAN_TO_STACKDRIVER} = require('@google-cloud/logging-bunyan'); -const {Writable} = require('stream'); -const process = require('process'); - -/** - * This class provides support for streaming your Bunyan logs to - * stdout using structured logging for Google Cloud Logging. - * - * @class - */ -class BunyanStdoutJsonLog extends Writable { - /** @param {Object=} options */ - constructor(options = null) { - super({objectMode: true}); - options = options || {}; - this.logName = options.logName || 'bunyan_log'; - this.resource = options.resource; - } - - /** - * Convenience method that Builds a bunyan stream object that you can put in - * the bunyan streams list. - * - * @param {string} level - * @return {Object} - */ - stream(level) { - return {level, type: 'raw', stream: this}; - } - - /** - * Format a bunyan record into a Stackdriver log entry. - * @param {Object} record - * @return {string} JSON-formatted log record. - */ - formatEntry_(record) { - if (typeof record === 'string') { - throw new Error('@google-cloud/logging-bunyan' + - 'only works as a raw bunyan stream type.'); - } - // Stackdriver Log Viewer picks up the summary line from the 'message' field - // of the payload. Unless the user has provided a 'message' property also, - // move the 'msg' to 'message'. - if (!record.message) { - // If this is an error, report the full stack trace. This allows - // Stackdriver Error Reporting to pick up errors automatically (for - // severity 'error' or higher). In this case we leave the 'msg' property - // intact. - // https://cloud.google.com/error-reporting/docs/formatting-error-messages - // - if (record.err && record.err.stack) { - record.message = record.err.stack; - } else if (record.msg) { - // Simply rename `msg` to `message`. - record.message = record.msg; - delete record.msg; - } - } - if (record.time) { - record.timestamp = record.time; - delete record.time; - } - record.resource = this.resource; - record.severity = BUNYAN_TO_STACKDRIVER.get(Number(record.level)); - return JSON.stringify(record) + '\n'; - } - // noinspection JSCheckFunctionSignatures - - /** - * Write the log record. - * - * @param {...any} args - */ - write(...args) { - const record = args[0]; - let encoding = null; - let callback; - if (typeof args[1] === 'string') { - encoding = args[1]; - callback = args[2]; - } else { - callback = args[1]; - } - - process.stdout.write(this.formatEntry_(record), encoding, callback); - } -} - -exports.BunyanStdoutJsonLog = BunyanStdoutJsonLog; diff --git a/cloudrun-malware-scanner/config.json b/cloudrun-malware-scanner/config.json.tmpl similarity index 62% rename from cloudrun-malware-scanner/config.json rename to cloudrun-malware-scanner/config.json.tmpl index a46c18a..d11b0d0 100644 --- a/cloudrun-malware-scanner/config.json +++ b/cloudrun-malware-scanner/config.json.tmpl @@ -2,12 +2,12 @@ "comments": [ "Configuration file for malware-scanner service.", "----", - "To use the configuration in this file, specify the environmental variable:", - " 'CONFIG_FILE=./config.json'", "", "'buckets' is a list of objects specifying source/destination buckets for scanning, allowing the service to handle multiple buckets", "Each object must have the 3 properties 'unscanned', 'clean' and 'quarantined', specifying the bucket names to use.", - "" + "", + "'ClamCvdMirrorBucket' is a GCS bucket used to mirror the clamav database definition files to prevent overloading the Clam servers", + "and being rate limited/blacklisted. Its contents are maintained by the updateCvdMirror.sh script" ], "buckets": [ { @@ -15,5 +15,6 @@ "clean": "clean-bucket-name", "quarantined": "quarantined-bucket-name" } - ] + ], + "ClamCvdMirrorBucket": "cvd-mirror-bucket-name" } diff --git a/cloudrun-malware-scanner/logger.js b/cloudrun-malware-scanner/logger.js index 1b1fab8..cd85fb1 100644 --- a/cloudrun-malware-scanner/logger.js +++ b/cloudrun-malware-scanner/logger.js @@ -16,14 +16,21 @@ * Create a Bunyan Logger using structured logging to stdout. */ -const {createLogger} = require('bunyan'); -const {BunyanStdoutJsonLog} = require('./bunyanStdoutJsonLog'); +const bunyan = require('bunyan'); +const {LoggingBunyan} = require('@google-cloud/logging-bunyan'); +const pkgJson = require('./package.json'); -// Bunyan Cloud Logging config with structured logging to Google Cloud Logging. -exports.logger = createLogger({ - name: 'malware-scanner', +// Create logging client. +const loggingBunyan = new LoggingBunyan({ + redirectToStdout: true, + projectId: process.env.PROJECT_ID, + logName: "malware-scanner", + useMessageField: false +}); + +exports.logger = bunyan.createLogger({ + name: pkgJson.name, streams: [ - // Log to stdout using structured logging - new BunyanStdoutJsonLog().stream('info'), + loggingBunyan.stream('info'), ], }); diff --git a/cloudrun-malware-scanner/metrics.js b/cloudrun-malware-scanner/metrics.js index 07c0646..d2a578e 100644 --- a/cloudrun-malware-scanner/metrics.js +++ b/cloudrun-malware-scanner/metrics.js @@ -24,6 +24,7 @@ const TAGS = { destinationBucket: {name: 'destination_bucket'}, clamVersion: {name: 'clam_version'}, cloudRunRevision: {name: 'cloud_run_revision'}, + cvdUpdateStatus: {name: 'cvd_update_status'}, }; const METRIC_EXPORT_INTERVAL = process.env.EXPORT_INTERVAL || 60; @@ -95,6 +96,25 @@ function writeScanCompletedMetric_(measure, sourceBucket, destinationBucket, tags); } +/** + * Writes metrics when a CVD Mirror Update occurs. + * + * @param {boolean} success + * @param {boolean} isUpdated + */ + function writeCvdMirrorUpdatedMetric(success, isUpdated) { + const tags = new TagMap(); + tags.set(TAGS.cloudRunRevision, {value: process.env.K_REVISION}); + tags.set(TAGS.cvdUpdateStatus, + {value: ( + success ? ( + isUpdated ? "SUCCESS_UPDATED" : "SUCCESS_NO_UPDATES" ) + : "FAILURE" )}); + globalStats.record( + [{ measure: METRICS.cvdUpdates, value: 1}], + tags); +} + /** * Initialize cloud monitoring and set up metrics descriptions * @param {string} projectId @@ -110,7 +130,12 @@ async function initMetrics(projectId) { }); globalStats.registerExporter(exporter); - const tagDefs = Object.values(TAGS); + const fileScanTags = [ + TAGS.clamVersion, + TAGS.cloudRunRevision, + TAGS.sourceBucket, + TAGS.destinationBucket + ] METRICS.cleanFiles = globalStats.createMeasureInt64( METRIC_TYPE_ROOT + 'clean-files', MeasureUnit.UNIT, @@ -118,7 +143,7 @@ async function initMetrics(projectId) { const cleanFilesView = globalStats.createView(METRICS.cleanFiles.name, - METRICS.cleanFiles, AggregationType.COUNT, tagDefs, + METRICS.cleanFiles, AggregationType.COUNT, fileScanTags, 'Number of files scanned that were found ' + 'to be clean of malware at the time of scan'); globalStats.registerView(cleanFilesView); @@ -129,7 +154,7 @@ async function initMetrics(projectId) { const infectedFilesView = globalStats.createView( METRICS.infectedFiles.name, METRICS.infectedFiles, - AggregationType.COUNT, tagDefs, + AggregationType.COUNT, fileScanTags, 'Number of files scanned that were found ' + 'to contain malware at the time of scan'); globalStats.registerView(infectedFilesView); @@ -140,7 +165,7 @@ async function initMetrics(projectId) { const failedScansView = globalStats.createView( METRICS.scansFailed.name, METRICS.scansFailed, - AggregationType.COUNT, tagDefs, + AggregationType.COUNT, fileScanTags, 'Number of malware scan requests which failed'); globalStats.registerView(failedScansView); @@ -150,7 +175,7 @@ async function initMetrics(projectId) { const bytesScannedView = globalStats.createView( METRICS.bytesScanned.name, METRICS.bytesScanned, - AggregationType.COUNT, tagDefs, 'Total number of bytes scanned'); + AggregationType.SUM, fileScanTags, 'Total number of bytes scanned'); globalStats.registerView(bytesScannedView); METRICS.scanDuration = globalStats.createMeasureDouble( @@ -158,7 +183,7 @@ async function initMetrics(projectId) { 'The scan duration in milliseconds'); const scanDurationView = globalStats.createView( METRICS.scanDuration.name, METRICS.scanDuration, - AggregationType.DISTRIBUTION, tagDefs, 'Duration spent scanning files', + AggregationType.DISTRIBUTION, fileScanTags, 'Duration spent scanning files', // Bucket Boundaries in ms [ 0, @@ -177,6 +202,17 @@ async function initMetrics(projectId) { ]); globalStats.registerView(scanDurationView); + METRICS.cvdUpdates = globalStats.createMeasureInt64( + METRIC_TYPE_ROOT + 'cvd-mirror-updates', MeasureUnit.UNIT, + 'Number of CVD mirror Update Checks performed'); + + const cvdUpdatesView = globalStats.createView( + METRICS.cvdUpdates.name, METRICS.cvdUpdates, + AggregationType.COUNT, + [TAGS.cloudRunRevision, TAGS.cvdUpdateStatus], + 'Number of CVD mirror update checks performed with their status'); + globalStats.registerView(cvdUpdatesView); + logger.info( `Metrics initialized for ${METRIC_TYPE_ROOT} on project ${projectId}`); } @@ -184,4 +220,5 @@ async function initMetrics(projectId) { exports.writeScanFailed = writeScanFailedMetric; exports.writeScanClean = writeScanCleanMetric; exports.writeScanInfected = writeScanInfectedMetric; +exports.writeCvdMirrorUpdated = writeCvdMirrorUpdatedMetric; exports.init = initMetrics; diff --git a/cloudrun-malware-scanner/package-lock.json b/cloudrun-malware-scanner/package-lock.json index a1103a5..f3b9cc3 100644 --- a/cloudrun-malware-scanner/package-lock.json +++ b/cloudrun-malware-scanner/package-lock.json @@ -1,197 +1,217 @@ { "name": "gcs-malware-scanner", - "version": "1.7.0", + "version": "2.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "gcs-malware-scanner", - "version": "1.7.0", + "version": "2.0.0", "license": "Apache-2.0", "dependencies": { - "@google-cloud/common": "^3.10.0", - "@google-cloud/logging-bunyan": "^3.2.0", - "@google-cloud/monitoring": "^2.3.5", - "@google-cloud/storage": "^5.18.2", + "@google-cloud/common": "^4.0.3", + "@google-cloud/logging-bunyan": "^4.2.2", + "@google-cloud/monitoring": "^3.0.3", + "@google-cloud/storage": "^6.7.0", "@opencensus/core": "^0.1.0", "@opencensus/exporter-stackdriver": "^0.1.0", "bunyan": "^1.8.15", "clamdjs": "^1.0.2", - "express": "^4.17.3", - "google-auth-library": "^7.14.0", - "node-fetch": "^3.2.10", + "express": "^4.18.2", + "google-auth-library": "^8.7.0", + "node-fetch": "^3.3.0", "process": "^0.11.10" }, "devDependencies": { - "eslint": "^8.9.0", + "eslint": "^8.29.0", "eslint-config-google": "^0.14.0" } }, + "node_modules/@babel/parser": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", + "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.1.0.tgz", - "integrity": "sha512-C1DfL7XX4nPqGd6jcP01W9pVM1HYCuUkFk1432D7F0v3JSlUIeOYn9oCoi3eoLZ+iwBSb29BMFxxny0YrrEZqg==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.1", - "globals": "^13.9.0", - "ignore": "^4.0.6", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/@google-cloud/common": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-3.10.0.tgz", - "integrity": "sha512-XMbJYMh/ZSaZnbnrrOFfR/oQrb0SxG4qh6hDisWCoEbFcBHV0qHQo4uXfeMCzolx2Mfkh6VDaOGg+hyJsmxrlw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-4.0.3.tgz", + "integrity": "sha512-fUoMo5b8iAKbrYpneIRV3z95AlxVJPrjpevxs4SKoclngWZvTXBSGpNisF5+x5m+oNGve7jfB1e6vNBZBUs7Fw==", "dependencies": { - "@google-cloud/projectify": "^2.0.0", - "@google-cloud/promisify": "^2.0.0", + "@google-cloud/projectify": "^3.0.0", + "@google-cloud/promisify": "^3.0.0", "arrify": "^2.0.1", "duplexify": "^4.1.1", "ent": "^2.2.0", "extend": "^3.0.2", - "google-auth-library": "^7.14.0", - "retry-request": "^4.2.2", - "teeny-request": "^7.0.0" + "google-auth-library": "^8.0.2", + "retry-request": "^5.0.0", + "teeny-request": "^8.0.0" }, "engines": { - "node": ">=10" + "node": ">=12.0.0" } }, "node_modules/@google-cloud/logging": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@google-cloud/logging/-/logging-9.6.1.tgz", - "integrity": "sha512-Ch7wOAysUX9j/blUWShsN4Kia15qeTjCOqP9aqFf18uGNIZiNFfVJ4qhiYHZgSROqpYB8Ep8TzOSDkbc5OaipA==", - "dependencies": { - "@google-cloud/common": "^3.4.1", - "@google-cloud/paginator": "^3.0.0", - "@google-cloud/projectify": "^2.0.0", - "@google-cloud/promisify": "^2.0.0", + "version": "10.3.2", + "resolved": "https://registry.npmjs.org/@google-cloud/logging/-/logging-10.3.2.tgz", + "integrity": "sha512-asINa/B1iiuEGjJP2O973YcpOAwHstLI022oC+pVBzpnifjZgtLwjCuDJlhRVuOdrYHr3vaAGaRxHEN2VdX6Ng==", + "dependencies": { + "@google-cloud/common": "^4.0.0", + "@google-cloud/paginator": "^4.0.0", + "@google-cloud/projectify": "^3.0.0", + "@google-cloud/promisify": "^3.0.0", "arrify": "^2.0.1", "dot-prop": "^6.0.0", "eventid": "^2.0.0", "extend": "^3.0.2", "gcp-metadata": "^4.0.0", - "google-auth-library": "^7.0.0", - "google-gax": "^2.24.1", + "google-auth-library": "^8.0.2", + "google-gax": "^3.5.2", "on-finished": "^2.3.0", "pumpify": "^2.0.1", "stream-events": "^1.0.5", - "uuid": "^8.0.0" + "uuid": "^9.0.0" }, "engines": { - "node": ">=10" + "node": ">=12.0.0" } }, "node_modules/@google-cloud/logging-bunyan": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@google-cloud/logging-bunyan/-/logging-bunyan-3.2.0.tgz", - "integrity": "sha512-ns6P9B2uzoM9q/I1LOwZHg4n0Ouibv5l3FB2jN41YAAVPeU+UzT5hyy39Y+gC2z5ueweKsC7jd22lAqg0SwkIg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@google-cloud/logging-bunyan/-/logging-bunyan-4.2.2.tgz", + "integrity": "sha512-YSRwP7CzK2C353zjNASG2XN8gYV3HwfoDfwk+cdcQ161BQJptzuLQcfDy9vNKaM/SMf3sL7mJIgoNbeN2YZpyA==", "dependencies": { - "@google-cloud/logging": "^9.0.0", - "google-auth-library": "^7.0.0" + "@google-cloud/logging": "^10.2.2", + "google-auth-library": "^8.0.2" }, "engines": { - "node": ">=10" + "node": ">=12.0.0" }, "peerDependencies": { "bunyan": "*" } }, "node_modules/@google-cloud/monitoring": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@google-cloud/monitoring/-/monitoring-2.3.5.tgz", - "integrity": "sha512-91+gobJMXEibKxnPOY3Q+ccFifQyRUdFpQ8uQ8acqWesxVj9ZH1VRm3ZpoleYWbbMe32cymhpGRamZ6t31veRQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@google-cloud/monitoring/-/monitoring-3.0.3.tgz", + "integrity": "sha512-SIm1EUYwrb0HKvjdc+1LyL2naGU+k4KeivWq3eYgsjRnRncRFMWvmqN2giVJWbDvnfk4xhkbPEm3lggXjWU+qQ==", "dependencies": { - "google-gax": "^2.24.1" + "google-gax": "^3.5.2" }, "engines": { - "node": ">=10" + "node": ">=12.0.0" } }, "node_modules/@google-cloud/paginator": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.7.tgz", - "integrity": "sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-4.0.1.tgz", + "integrity": "sha512-6G1ui6bWhNyHjmbYwavdN7mpVPRBtyDg/bfqBTAlwr413On2TnFNfDxc9UhTJctkgoCDgQXEKiRPLPR9USlkbQ==", "dependencies": { "arrify": "^2.0.0", "extend": "^3.0.2" }, "engines": { - "node": ">=10" + "node": ">=12.0.0" } }, "node_modules/@google-cloud/projectify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-2.1.1.tgz", - "integrity": "sha512-+rssMZHnlh0twl122gXY4/aCrk0G1acBqkHFfYddtsqpYXGxA29nj9V5V9SfC+GyOG00l650f6lG9KL+EpFEWQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-3.0.0.tgz", + "integrity": "sha512-HRkZsNmjScY6Li8/kb70wjGlDDyLkVk3KvoEo9uIoxSjYLJasGiCch9+PqRVDOCGUFvEIqyogl+BeqILL4OJHA==", "engines": { - "node": ">=10" + "node": ">=12.0.0" } }, "node_modules/@google-cloud/promisify": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.4.tgz", - "integrity": "sha512-j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-3.0.1.tgz", + "integrity": "sha512-z1CjRjtQyBOYL+5Qr9DdYIfrdLBe746jRTYfaYU6MeXkqp7UfYs/jX16lFFVzZ7PGEJvqZNqYUEtb1mvDww4pA==", "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/@google-cloud/storage": { - "version": "5.18.2", - "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-5.18.2.tgz", - "integrity": "sha512-hL/6epBF2uPt7YtJoOKI6mVxe6RsKBs7S8o2grE0bFGdQKSOngVHBcstH8jDw7aN2rXGouA2TfVTxH+VapY5cg==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-6.7.0.tgz", + "integrity": "sha512-iEit3dvUhGQV3pPC8aci/Y+F6K2QJ/UvcXhymj8gnO8IYQfZSZvFf361yX4BWNUlbHzanUQVQdF9RvgEM8fwpw==", "dependencies": { - "@google-cloud/common": "^3.8.1", "@google-cloud/paginator": "^3.0.7", - "@google-cloud/promisify": "^2.0.0", + "@google-cloud/projectify": "^3.0.0", + "@google-cloud/promisify": "^3.0.0", "abort-controller": "^3.0.0", - "arrify": "^2.0.0", "async-retry": "^1.3.3", "compressible": "^2.0.12", - "configstore": "^5.0.0", - "date-and-time": "^2.0.0", "duplexify": "^4.0.0", + "ent": "^2.2.0", "extend": "^3.0.2", - "gaxios": "^4.0.0", - "get-stream": "^6.0.0", - "google-auth-library": "^7.0.0", - "hash-stream-validation": "^0.2.2", + "gaxios": "^5.0.0", + "google-auth-library": "^8.0.1", "mime": "^3.0.0", "mime-types": "^2.0.8", "p-limit": "^3.0.1", - "pumpify": "^2.0.0", - "snakeize": "^0.1.0", - "stream-events": "^1.0.4", - "xdg-basedir": "^4.0.0" + "retry-request": "^5.0.0", + "teeny-request": "^8.0.0", + "uuid": "^8.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@google-cloud/storage/node_modules/@google-cloud/paginator": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.7.tgz", + "integrity": "sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ==", + "dependencies": { + "arrify": "^2.0.0", + "extend": "^3.0.2" }, "engines": { "node": ">=10" } }, + "node_modules/@google-cloud/storage/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==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@grpc/grpc-js": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.6.7.tgz", - "integrity": "sha512-eBM03pu9hd3VqDQG+kHahiG1x80RGkkqqRb1Pchcwqej/KkAH95gAvKs6laqaHCycYaPK+TKuNQnOz9UXYA8qw==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.7.3.tgz", + "integrity": "sha512-H9l79u4kJ2PVSxUNA08HMYAnUBLj9v6KjYQ7SQ71hOZcEXhShE/y5iQCesP8+6/Ik/7i2O0a10bPquIcYfufog==", "dependencies": { - "@grpc/proto-loader": "^0.6.4", + "@grpc/proto-loader": "^0.7.0", "@types/node": ">=12.12.47" }, "engines": { @@ -199,14 +219,14 @@ } }, "node_modules/@grpc/proto-loader": { - "version": "0.6.13", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz", - "integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.3.tgz", + "integrity": "sha512-5dAvoZwna2Py3Ef96Ux9jIkp3iZ62TUsV00p3wVBPNX5K178UbNi8Q7gQVqwXT1Yq9RejIGG9G2IPEo93T6RcA==", "dependencies": { "@types/long": "^4.0.1", "lodash.camelcase": "^4.3.0", "long": "^4.0.0", - "protobufjs": "^6.11.3", + "protobufjs": "^7.0.0", "yargs": "^16.2.0" }, "bin": { @@ -217,25 +237,73 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "node_modules/@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": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@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, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@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, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@opencensus/core": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/@opencensus/core/-/core-0.1.0.tgz", @@ -251,6 +319,14 @@ "node": ">=8" } }, + "node_modules/@opencensus/core/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==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@opencensus/exporter-stackdriver": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/@opencensus/exporter-stackdriver/-/exporter-stackdriver-0.1.0.tgz", @@ -265,6 +341,21 @@ "node": ">=10" } }, + "node_modules/@opencensus/exporter-stackdriver/node_modules/gaxios": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", + "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", + "dependencies": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@opencensus/exporter-stackdriver/node_modules/google-auth-library": { "version": "6.1.6", "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.6.tgz", @@ -284,6 +375,52 @@ "node": ">=10" } }, + "node_modules/@opencensus/exporter-stackdriver/node_modules/google-p12-pem": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz", + "integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==", + "dependencies": { + "node-forge": "^1.3.1" + }, + "bin": { + "gp12-pem": "build/src/bin/gp12-pem.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@opencensus/exporter-stackdriver/node_modules/gtoken": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", + "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", + "dependencies": { + "gaxios": "^4.0.0", + "google-p12-pem": "^3.1.3", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@opencensus/exporter-stackdriver/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/@opencensus/resource-util": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/@opencensus/resource-util/-/resource-util-0.1.0.tgz", @@ -358,15 +495,34 @@ "node": ">= 10" } }, + "node_modules/@types/linkify-it": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" + }, "node_modules/@types/long": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, + "node_modules/@types/markdown-it": { + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "dependencies": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" + }, "node_modules/@types/node": { - "version": "17.0.41", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.41.tgz", - "integrity": "sha512-xA6drNNeqb5YyV5fO3OAEsnXLfO7uF0whiOfPTz5AeDo8KeZFmODKnvwPymMNO8qE/an8pVY/O50tig2SQCrGw==" + "version": "18.11.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.10.tgz", + "integrity": "sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ==" }, "node_modules/abort-controller": { "version": "3.0.0", @@ -392,10 +548,9 @@ } }, "node_modules/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, + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", "bin": { "acorn": "bin/acorn" }, @@ -407,7 +562,6 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -464,13 +618,12 @@ "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "node_modules/arrify": { "version": "2.0.1", @@ -511,8 +664,7 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "devOptional": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base64-js": { "version": "1.5.1", @@ -534,31 +686,39 @@ ] }, "node_modules/bignumber.js": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", - "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", + "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", "engines": { "node": "*" } }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, "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==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dependencies": { "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.7", - "raw-body": "2.4.3", - "type-is": "~1.6.18" + "on-finished": "2.4.1", + "qs": "6.11.0", + "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": { @@ -572,13 +732,12 @@ "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -587,7 +746,7 @@ "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" }, "node_modules/bunyan": { "version": "1.8.15", @@ -614,6 +773,18 @@ "node": ">= 0.8" } }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -623,11 +794,21 @@ "node": ">=6" } }, + "node_modules/catharsis": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", + "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", + "dependencies": { + "lodash": "^4.17.15" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -684,35 +865,7 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "devOptional": true - }, - "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/configstore/node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/content-disposition": { "version": "0.5.4", @@ -743,9 +896,9 @@ } }, "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "engines": { "node": ">= 0.6" } @@ -753,7 +906,7 @@ "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/cross-spawn": { "version": "7.0.3", @@ -769,19 +922,6 @@ "node": ">= 8" } }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/d64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d64/-/d64-1.0.0.tgz", - "integrity": "sha1-QAKofoUMv8n52XBrYPymE6MzbpA=" - }, "node_modules/data-uri-to-buffer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", @@ -790,15 +930,10 @@ "node": ">= 12" } }, - "node_modules/date-and-time": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-2.0.1.tgz", - "integrity": "sha512-O7Xe5dLaqvY/aF/MFWArsAM1J4j7w1CSZlPCX9uHgmb+6SbkPd8Q4YOvfvH/cZGvFlJFfHOZKxQtmMUOoZhc/w==" - }, "node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { "ms": "2.1.2" }, @@ -814,21 +949,24 @@ "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } }, "node_modules/doctrine": { "version": "3.0.0", @@ -891,7 +1029,7 @@ "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/emitter-listener": { "version": "1.1.2", @@ -909,7 +1047,7 @@ "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "engines": { "node": ">= 0.8" } @@ -925,7 +1063,15 @@ "node_modules/ent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=" + "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==" + }, + "node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, "node_modules/escalade": { "version": "3.1.1", @@ -938,7 +1084,7 @@ "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/escape-string-regexp": { "version": "4.0.0", @@ -952,14 +1098,92 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/eslint": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.9.0.tgz", - "integrity": "sha512-PB09IGwv4F4b0/atrbcMFboF/giawbBLVC7fyDamk5Wtey4Jh2K+rYaBhCAbUyEI4QzB1ly09Uglc9iCtFaG2Q==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.29.0.tgz", + "integrity": "sha512-isQ4EEiyUjZFbEKvEGJKKGBwXtvXX+zJbkVKCgTuB9t/+jUBcy8avhkEwWJecI15BkRkOYmvIM5ynbhRjEkoeg==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.1.0", - "@humanwhocodes/config-array": "^0.9.2", + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -969,30 +1193,32 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.15.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" @@ -1060,30 +1286,43 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/espree": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", - "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", - "dev": true, + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dependencies": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, "dependencies": { "estraverse": "^5.1.0" }, @@ -1107,7 +1346,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, "engines": { "node": ">=4.0" } @@ -1116,7 +1354,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -1124,7 +1361,7 @@ "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "engines": { "node": ">= 0.6" } @@ -1138,49 +1375,57 @@ } }, "node_modules/eventid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eventid/-/eventid-2.0.0.tgz", - "integrity": "sha512-4CYGJ4e2ZkNSr89U/IGzUYOSqppRUCUz37HQX+xk3ArJwK3K1B7TI1PBeWb1umz3rDuMUwPzJCWR44JJS8yEnQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/eventid/-/eventid-2.0.1.tgz", + "integrity": "sha512-sPNTqiMokAvV048P2c9+foqVJzk49o6d4e0D/sq5jog3pw+4kBgyR0gaM1FM7Mx6Kzd9dztesh9oYz1LWWOpzw==", "dependencies": { - "d64": "^1.0.0", "uuid": "^8.0.0" }, "engines": { "node": ">=10" } }, + "node_modules/eventid/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==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "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==", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.2", + "body-parser": "1.20.1", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.2", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.9.7", + "qs": "6.11.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.17.2", - "serve-static": "1.14.2", + "send": "0.18.0", + "serve-static": "1.15.0", "setprototypeof": "1.2.0", - "statuses": "~1.5.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -1200,7 +1445,7 @@ "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/extend": { "version": "3.0.2", @@ -1222,18 +1467,26 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "node_modules/fast-text-encoding": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", - "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", + "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==" + }, + "node_modules/fastq": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz", + "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } }, "node_modules/fetch-blob": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.4.tgz", - "integrity": "sha512-Eq5Xv5+VlSrYWEqKrusxY1C3Hm/hjeAsCGVG3ft7pZahlUAChpGZT/Ms1WmSLnEAisEXszjzu/s+ce6HZB2VHA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", "funding": [ { "type": "github", @@ -1265,16 +1518,16 @@ } }, "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "engines": { @@ -1292,7 +1545,23 @@ "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/flat-cache": { "version": "3.0.4", @@ -1308,9 +1577,9 @@ } }, "node_modules/flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, "node_modules/formdata-polyfill": { @@ -1335,7 +1604,7 @@ "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "engines": { "node": ">= 0.6" } @@ -1343,28 +1612,25 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/gaxios": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.2.tgz", - "integrity": "sha512-T+ap6GM6UZ0c4E6yb1y/hy2UB6hTrqhglp3XfmU9qbLCGRYhLVV5aRPpC4EmoG8N8zOnkYCgoBz+ScvGAARY6Q==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.2.tgz", + "integrity": "sha512-TjtV2AJOZoMQqRYoy5eM8cCQogYwazWNYLQ72QB0kwa6vHHruYkGmhhyrlzbmgNHK1dNnuP2WSH81urfzyN2Og==", "dependencies": { - "abort-controller": "^3.0.0", "extend": "^3.0.2", "https-proxy-agent": "^5.0.0", "is-stream": "^2.0.0", - "node-fetch": "^2.6.1" + "node-fetch": "^2.6.7" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/gaxios/node_modules/node-fetch": { @@ -1398,6 +1664,40 @@ "node": ">=10" } }, + "node_modules/gcp-metadata/node_modules/gaxios": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", + "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", + "dependencies": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gcp-metadata/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -1406,32 +1706,32 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" + "node_modules/get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "*" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -1449,10 +1749,29 @@ "node": ">=10.13.0" } }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.1.tgz", + "integrity": "sha512-362NP+zlprccbEt/SkxKfRMHnNY85V74mVnpUpNyr3F35covl09Kec7/sEFLt3RA4oXmewtoaanoIf67SE5Y5g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -1465,48 +1784,62 @@ } }, "node_modules/google-auth-library": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.14.0.tgz", - "integrity": "sha512-or8r7qUqGVI3W8lVSdPh0ZpeFyQHeE73g5c0p+bLNTTUFXJ+GSeDQmZRZ2p4H8cF/RJYa4PNvi/A1ar1uVNLFA==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.7.0.tgz", + "integrity": "sha512-1M0NG5VDIvJZEnstHbRdckLZESoJwguinwN8Dhae0j2ZKIQFIV63zxm6Fo6nM4xkgqUr2bbMtV5Dgo+Hy6oo0Q==", "dependencies": { "arrify": "^2.0.0", "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "fast-text-encoding": "^1.0.0", - "gaxios": "^4.0.0", - "gcp-metadata": "^4.2.0", - "gtoken": "^5.0.4", + "gaxios": "^5.0.0", + "gcp-metadata": "^5.0.0", + "gtoken": "^6.1.0", "jws": "^4.0.0", "lru-cache": "^6.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" + } + }, + "node_modules/google-auth-library/node_modules/gcp-metadata": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.0.1.tgz", + "integrity": "sha512-jiRJ+Fk7e8FH68Z6TLaqwea307OktJpDjmYnU7/li6ziwvVvU2RlrCyQo5vkdeP94chm0kcSCOOszvmuaioq3g==", + "dependencies": { + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/google-gax": { - "version": "2.30.5", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.30.5.tgz", - "integrity": "sha512-Jey13YrAN2hfpozHzbtrwEfEHdStJh1GwaQ2+Akh1k0Tv/EuNVSuBtHZoKSBm5wBMvNsxTsEIZ/152NrYyZgxQ==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.5.2.tgz", + "integrity": "sha512-AyP53w0gHcWlzxm+jSgqCR3Xu4Ld7EpSjhtNBnNhzwwWaIUyphH9kBGNIEH+i4UGkTUXOY29K/Re8EiAvkBRGw==", "dependencies": { - "@grpc/grpc-js": "~1.6.0", - "@grpc/proto-loader": "^0.6.12", + "@grpc/grpc-js": "~1.7.0", + "@grpc/proto-loader": "^0.7.0", "@types/long": "^4.0.0", "abort-controller": "^3.0.0", "duplexify": "^4.0.0", "fast-text-encoding": "^1.0.3", - "google-auth-library": "^7.14.0", + "google-auth-library": "^8.0.2", "is-stream-ended": "^0.1.4", "node-fetch": "^2.6.1", "object-hash": "^3.0.0", - "proto3-json-serializer": "^0.1.8", - "protobufjs": "6.11.3", - "retry-request": "^4.0.0" + "proto3-json-serializer": "^1.0.0", + "protobufjs": "7.1.2", + "protobufjs-cli": "1.0.2", + "retry-request": "^5.0.0" }, "bin": { - "compileProtos": "build/tools/compileProtos.js" + "compileProtos": "build/tools/compileProtos.js", + "minifyProtoJson": "build/tools/minify.js" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/google-gax/node_modules/node-fetch": { @@ -1529,17 +1862,17 @@ } }, "node_modules/google-p12-pem": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.3.tgz", - "integrity": "sha512-MC0jISvzymxePDVembypNefkAQp+DRP7dBE+zNUPaIjEspIlYg0++OrsNr248V9tPbz6iqtZ7rX1hxWA5B8qBQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", + "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", "dependencies": { - "node-forge": "^1.0.0" + "node-forge": "^1.3.1" }, "bin": { "gp12-pem": "build/src/bin/gp12-pem.js" }, "engines": { - "node": ">=10" + "node": ">=12.0.0" } }, "node_modules/googleapis": { @@ -1570,6 +1903,21 @@ "node": ">=10.10.0" } }, + "node_modules/googleapis-common/node_modules/gaxios": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", + "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", + "dependencies": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/googleapis-common/node_modules/google-auth-library": { "version": "6.1.6", "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.6.tgz", @@ -1589,6 +1937,75 @@ "node": ">=10" } }, + "node_modules/googleapis-common/node_modules/google-p12-pem": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz", + "integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==", + "dependencies": { + "node-forge": "^1.3.1" + }, + "bin": { + "gp12-pem": "build/src/bin/gp12-pem.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/googleapis-common/node_modules/gtoken": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", + "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", + "dependencies": { + "gaxios": "^4.0.0", + "google-p12-pem": "^3.1.3", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/googleapis-common/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/googleapis-common/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==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/googleapis/node_modules/gaxios": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", + "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", + "dependencies": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/googleapis/node_modules/google-auth-library": { "version": "6.1.6", "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.6.tgz", @@ -1608,51 +2025,119 @@ "node": ">=10" } }, - "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==" + "node_modules/googleapis/node_modules/google-p12-pem": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz", + "integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==", + "dependencies": { + "node-forge": "^1.3.1" + }, + "bin": { + "gp12-pem": "build/src/bin/gp12-pem.js" + }, + "engines": { + "node": ">=10" + } }, - "node_modules/gtoken": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.1.tgz", - "integrity": "sha512-yqOREjzLHcbzz1UrQoxhBtpk8KjrVhuqPE7od1K2uhyxG2BHjKZetlbLw/SPZak/QqTIQW+addS+EcjqQsZbwQ==", + "node_modules/googleapis/node_modules/gtoken": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", + "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", "dependencies": { "gaxios": "^4.0.0", - "google-p12-pem": "^3.0.3", + "google-p12-pem": "^3.1.3", "jws": "^4.0.0" }, "engines": { "node": ">=10" } }, + "node_modules/googleapis/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/gtoken": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", + "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", + "dependencies": { + "gaxios": "^5.0.1", + "google-p12-pem": "^4.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { "node": ">=8" } }, - "node_modules/hash-stream-validation": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/hash-stream-validation/-/hash-stream-validation-0.2.4.tgz", - "integrity": "sha512-Gjzu0Xn7IagXVkSu9cSFuK1fqzwtLwFhNhVL8IFJijRNMgUttFbBSIAzKuSIrsFMO1+g1RlsoN49zPIbwPDMGQ==" + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "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==", "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-proxy-agent": { @@ -1669,9 +2154,9 @@ } }, "node_modules/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==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dependencies": { "agent-base": "6", "debug": "4" @@ -1692,9 +2177,9 @@ } }, "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz", + "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==", "dev": true, "engines": { "node": ">= 4" @@ -1719,7 +2204,8 @@ "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, "engines": { "node": ">=0.8.19" } @@ -1727,8 +2213,7 @@ "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "devOptional": true, + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -1750,7 +2235,7 @@ "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -1784,6 +2269,15 @@ "node": ">=8" } }, + "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, + "engines": { + "node": ">=8" + } + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -1800,17 +2294,22 @@ "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==" }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "node_modules/js-sdsl": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -1823,6 +2322,61 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/js2xmlparser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", + "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", + "dependencies": { + "xmlcreate": "^2.0.4" + } + }, + "node_modules/jsdoc": { + "version": "3.6.11", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.11.tgz", + "integrity": "sha512-8UCU0TYeIYD9KeLzEcAu2q8N/mx9O3phAGl32nmHlE0LpaJL71mMkP4d+QE5zWfNt50qheHtOZ0qoxVrsX5TUg==", + "dependencies": { + "@babel/parser": "^7.9.4", + "@types/markdown-it": "^12.2.3", + "bluebird": "^3.7.2", + "catharsis": "^0.9.0", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.2", + "klaw": "^3.0.0", + "markdown-it": "^12.3.2", + "markdown-it-anchor": "^8.4.1", + "marked": "^4.0.10", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "taffydb": "2.6.2", + "underscore": "~1.13.2" + }, + "bin": { + "jsdoc": "jsdoc.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/jsdoc/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jsdoc/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/json-bigint": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", @@ -1840,7 +2394,7 @@ "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, "node_modules/jwa": { @@ -1862,6 +2416,14 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "dependencies": { + "graceful-fs": "^4.1.9" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -1875,6 +2437,34 @@ "node": ">= 0.8.0" } }, + "node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, "node_modules/lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", @@ -1910,32 +2500,50 @@ "node": ">=10" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "markdown-it": "bin/markdown-it.js" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/markdown-it-anchor": { + "version": "8.6.5", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.5.tgz", + "integrity": "sha512-PI1qEHHkTNWT+X6Ip9w+paonfIQ+QZP9sCeMYi47oqhH+EsW8CrJ8J7CzV19QVOj6il8ATGbK2nTECj22ZHGvQ==", + "peerDependencies": { + "@types/markdown-it": "*", + "markdown-it": "*" + } + }, + "node_modules/marked": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.3.tgz", + "integrity": "sha512-slWRdJkbTZ+PjkyJnE30Uid64eHwbwa1Q25INCAYfZlK4o6ylagBy/Le9eWntqJFoFT93ikUKMv47GZ4gTwHkw==", "bin": { - "semver": "bin/semver.js" + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" } }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + }, "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=", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "engines": { "node": ">= 0.6" } @@ -1943,12 +2551,12 @@ "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=" + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "engines": { "node": ">= 0.6" } @@ -1965,19 +2573,19 @@ } }, "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==", "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==", "dependencies": { - "mime-db": "1.51.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" @@ -1987,7 +2595,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1996,18 +2603,20 @@ } }, "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "optional": true + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "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==", "optional": true, "dependencies": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" @@ -2030,7 +2639,7 @@ "node_modules/mv": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", + "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", "optional": true, "dependencies": { "mkdirp": "~0.5.1", @@ -2044,7 +2653,7 @@ "node_modules/mv/node_modules/glob": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", "optional": true, "dependencies": { "inflight": "^1.0.4", @@ -2060,7 +2669,7 @@ "node_modules/mv/node_modules/rimraf": { "version": "2.4.5", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", + "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", "optional": true, "dependencies": { "glob": "^6.0.1" @@ -2070,21 +2679,21 @@ } }, "node_modules/nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", "optional": true }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, "node_modules/ncp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", + "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", "optional": true, "bin": { "ncp": "bin/ncp" @@ -2117,9 +2726,9 @@ } }, "node_modules/node-fetch": { - "version": "3.2.10", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.10.tgz", - "integrity": "sha512-MhuzNwdURnZ1Cp4XTazr69K0BTizsBroX7Zx3UgDSVcZYKF/6p0CBe4EUb/hLqmzVhl0UpYfgRljQ4yxE+iCxA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.0.tgz", + "integrity": "sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==", "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -2134,9 +2743,9 @@ } }, "node_modules/node-forge": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.0.tgz", - "integrity": "sha512-08ARB91bUi6zNKzVmaj3QO7cr397uiDT2nJ63cHjyNtCTWIgvS47j3eT0WfzUwS9+6Z5YshRaoasFkXCKrIYbA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "engines": { "node": ">= 6.13.0" } @@ -2149,10 +2758,18 @@ "node": ">= 6" } }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "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==", "dependencies": { "ee-first": "1.1.1" }, @@ -2163,7 +2780,7 @@ "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dependencies": { "wrappy": "1" } @@ -2199,6 +2816,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -2219,11 +2851,19 @@ "node": ">= 0.8" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "devOptional": true, + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "engines": { "node": ">=0.10.0" } @@ -2240,7 +2880,7 @@ "node_modules/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=" + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, "node_modules/prelude-ls": { "version": "1.2.1", @@ -2254,23 +2894,26 @@ "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "engines": { "node": ">= 0.6.0" } }, "node_modules/proto3-json-serializer": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-0.1.9.tgz", - "integrity": "sha512-A60IisqvnuI45qNRygJjrnNjX2TMdQGMY+57tR3nul3ZgO2zXkR9OGR8AXxJhkqx84g0FTnrfi3D5fWMSdANdQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.1.0.tgz", + "integrity": "sha512-SjXwUWe/vANGs/mJJTbw5++7U67nwsymg7qsoPtw6GiXqw3kUy8ByojrlEdVE2efxAdKreX8WkDafxvYW95ZQg==", "dependencies": { - "protobufjs": "^6.11.2" + "protobufjs": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" } }, "node_modules/protobufjs": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", - "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.1.2.tgz", + "integrity": "sha512-4ZPTPkXCdel3+L81yw3dG6+Kq3umdWKh7Dc7GW/CpNk4SX3hK58iPCWeCyhVTDrbkNeKrYNZ7EojM5WDaEWTLQ==", "hasInstallScript": true, "dependencies": { "@protobufjs/aspromise": "^1.1.2", @@ -2283,15 +2926,45 @@ "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", "@types/node": ">=13.7.0", - "long": "^4.0.0" + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/protobufjs-cli": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.0.2.tgz", + "integrity": "sha512-cz9Pq9p/Zs7okc6avH20W7QuyjTclwJPgqXG11jNaulfS3nbVisID8rC+prfgq0gbZE0w9LBFd1OKFF03kgFzg==", + "dependencies": { + "chalk": "^4.0.0", + "escodegen": "^1.13.0", + "espree": "^9.0.0", + "estraverse": "^5.1.0", + "glob": "^8.0.0", + "jsdoc": "^3.6.3", + "minimist": "^1.2.0", + "semver": "^7.1.2", + "tmp": "^0.2.1", + "uglify-js": "^3.7.7" }, "bin": { "pbjs": "bin/pbjs", "pbts": "bin/pbts" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "protobufjs": "^7.0.0" } }, + "node_modules/protobufjs/node_modules/long": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", + "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -2333,9 +3006,12 @@ } }, "node_modules/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, "engines": { "node": ">=0.6" }, @@ -2343,6 +3019,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -2352,12 +3048,12 @@ } }, "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==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dependencies": { "bytes": "3.1.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -2398,6 +3094,14 @@ "node": ">=0.10.0" } }, + "node_modules/requizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", + "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", + "dependencies": { + "lodash": "^4.17.21" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -2416,22 +3120,31 @@ } }, "node_modules/retry-request": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz", - "integrity": "sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-5.0.2.tgz", + "integrity": "sha512-wfI3pk7EE80lCIXprqh7ym48IHYdwmAAzESdbU8Q9l7pnRCk9LEhpbOTNKjz6FARLm/Bl5m+4F0ABxOkYUujSQ==", "dependencies": { "debug": "^4.1.1", "extend": "^3.0.2" }, "engines": { - "node": ">=8.10.0" + "node": ">=12" + } + }, + "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/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": { "glob": "^7.1.3" }, @@ -2442,6 +3155,48 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -2473,9 +3228,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -2487,23 +3242,23 @@ } }, "node_modules/send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dependencies": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "engines": { "node": ">= 0.8.0" @@ -2520,7 +3275,7 @@ "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=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/send/node_modules/mime": { "version": "1.6.0", @@ -2539,14 +3294,14 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "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==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.2" + "send": "0.18.0" }, "engines": { "node": ">= 0.8.0" @@ -2583,22 +3338,34 @@ "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/snakeize": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/snakeize/-/snakeize-0.1.0.tgz", - "integrity": "sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0=" + "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==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/stream-events": { @@ -2650,7 +3417,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, "engines": { "node": ">=8" }, @@ -2661,13 +3427,12 @@ "node_modules/stubs": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", - "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=" + "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==" }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -2675,19 +3440,24 @@ "node": ">=8" } }, + "node_modules/taffydb": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", + "integrity": "sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA==" + }, "node_modules/teeny-request": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-7.1.3.tgz", - "integrity": "sha512-Ew3aoFzgQEatLA5OBIjdr1DWJUaC1xardG+qbPPo5k/y/3fMwXLxpjh5UB5dVfElktLaQbbMs80chkz53ByvSg==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-8.0.2.tgz", + "integrity": "sha512-34pe0a4zASseXZCKdeTiIZqSKA8ETHb1EwItZr01PAR3CLPojeAKgSjzeNS4373gi59hNulyDrPKEbh2zO9sCg==", "dependencies": { "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "node-fetch": "^2.6.1", "stream-events": "^1.0.5", - "uuid": "^8.0.0" + "uuid": "^9.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/teeny-request/node_modules/node-fetch": { @@ -2712,9 +3482,20 @@ "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=", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -2726,7 +3507,7 @@ "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/type-check": { "version": "0.4.0", @@ -2764,29 +3545,31 @@ "node": ">= 0.6" } }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dependencies": { - "crypto-random-string": "^2.0.0" + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "bin": { + "uglifyjs": "bin/uglifyjs" }, "engines": { - "node": ">=8" + "node": ">=0.8.0" } }, + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "engines": { "node": ">= 0.8" } @@ -2803,47 +3586,41 @@ "node_modules/url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", - "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=" + "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "engines": { "node": ">= 0.4.0" } }, "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==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", "bin": { "uuid": "dist/bin/uuid" } }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "engines": { "node": ">= 0.8" } }, "node_modules/web-streams-polyfill": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz", - "integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", "engines": { "node": ">= 8" } @@ -2851,12 +3628,12 @@ "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -2881,7 +3658,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -2905,26 +3681,12 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "engines": { - "node": ">=8" - } + "node_modules/xmlcreate": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", + "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" }, "node_modules/y18n": { "version": "5.0.8", @@ -2977,172 +3739,212 @@ } }, "dependencies": { + "@babel/parser": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", + "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==" + }, "@eslint/eslintrc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.1.0.tgz", - "integrity": "sha512-C1DfL7XX4nPqGd6jcP01W9pVM1HYCuUkFk1432D7F0v3JSlUIeOYn9oCoi3eoLZ+iwBSb29BMFxxny0YrrEZqg==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.1", - "globals": "^13.9.0", - "ignore": "^4.0.6", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } } }, "@google-cloud/common": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-3.10.0.tgz", - "integrity": "sha512-XMbJYMh/ZSaZnbnrrOFfR/oQrb0SxG4qh6hDisWCoEbFcBHV0qHQo4uXfeMCzolx2Mfkh6VDaOGg+hyJsmxrlw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-4.0.3.tgz", + "integrity": "sha512-fUoMo5b8iAKbrYpneIRV3z95AlxVJPrjpevxs4SKoclngWZvTXBSGpNisF5+x5m+oNGve7jfB1e6vNBZBUs7Fw==", "requires": { - "@google-cloud/projectify": "^2.0.0", - "@google-cloud/promisify": "^2.0.0", + "@google-cloud/projectify": "^3.0.0", + "@google-cloud/promisify": "^3.0.0", "arrify": "^2.0.1", "duplexify": "^4.1.1", "ent": "^2.2.0", "extend": "^3.0.2", - "google-auth-library": "^7.14.0", - "retry-request": "^4.2.2", - "teeny-request": "^7.0.0" + "google-auth-library": "^8.0.2", + "retry-request": "^5.0.0", + "teeny-request": "^8.0.0" } }, "@google-cloud/logging": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@google-cloud/logging/-/logging-9.6.1.tgz", - "integrity": "sha512-Ch7wOAysUX9j/blUWShsN4Kia15qeTjCOqP9aqFf18uGNIZiNFfVJ4qhiYHZgSROqpYB8Ep8TzOSDkbc5OaipA==", - "requires": { - "@google-cloud/common": "^3.4.1", - "@google-cloud/paginator": "^3.0.0", - "@google-cloud/projectify": "^2.0.0", - "@google-cloud/promisify": "^2.0.0", + "version": "10.3.2", + "resolved": "https://registry.npmjs.org/@google-cloud/logging/-/logging-10.3.2.tgz", + "integrity": "sha512-asINa/B1iiuEGjJP2O973YcpOAwHstLI022oC+pVBzpnifjZgtLwjCuDJlhRVuOdrYHr3vaAGaRxHEN2VdX6Ng==", + "requires": { + "@google-cloud/common": "^4.0.0", + "@google-cloud/paginator": "^4.0.0", + "@google-cloud/projectify": "^3.0.0", + "@google-cloud/promisify": "^3.0.0", "arrify": "^2.0.1", "dot-prop": "^6.0.0", "eventid": "^2.0.0", "extend": "^3.0.2", "gcp-metadata": "^4.0.0", - "google-auth-library": "^7.0.0", - "google-gax": "^2.24.1", + "google-auth-library": "^8.0.2", + "google-gax": "^3.5.2", "on-finished": "^2.3.0", "pumpify": "^2.0.1", "stream-events": "^1.0.5", - "uuid": "^8.0.0" + "uuid": "^9.0.0" } }, "@google-cloud/logging-bunyan": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@google-cloud/logging-bunyan/-/logging-bunyan-3.2.0.tgz", - "integrity": "sha512-ns6P9B2uzoM9q/I1LOwZHg4n0Ouibv5l3FB2jN41YAAVPeU+UzT5hyy39Y+gC2z5ueweKsC7jd22lAqg0SwkIg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@google-cloud/logging-bunyan/-/logging-bunyan-4.2.2.tgz", + "integrity": "sha512-YSRwP7CzK2C353zjNASG2XN8gYV3HwfoDfwk+cdcQ161BQJptzuLQcfDy9vNKaM/SMf3sL7mJIgoNbeN2YZpyA==", "requires": { - "@google-cloud/logging": "^9.0.0", - "google-auth-library": "^7.0.0" + "@google-cloud/logging": "^10.2.2", + "google-auth-library": "^8.0.2" } }, "@google-cloud/monitoring": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@google-cloud/monitoring/-/monitoring-2.3.5.tgz", - "integrity": "sha512-91+gobJMXEibKxnPOY3Q+ccFifQyRUdFpQ8uQ8acqWesxVj9ZH1VRm3ZpoleYWbbMe32cymhpGRamZ6t31veRQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@google-cloud/monitoring/-/monitoring-3.0.3.tgz", + "integrity": "sha512-SIm1EUYwrb0HKvjdc+1LyL2naGU+k4KeivWq3eYgsjRnRncRFMWvmqN2giVJWbDvnfk4xhkbPEm3lggXjWU+qQ==", "requires": { - "google-gax": "^2.24.1" + "google-gax": "^3.5.2" } }, "@google-cloud/paginator": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.7.tgz", - "integrity": "sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-4.0.1.tgz", + "integrity": "sha512-6G1ui6bWhNyHjmbYwavdN7mpVPRBtyDg/bfqBTAlwr413On2TnFNfDxc9UhTJctkgoCDgQXEKiRPLPR9USlkbQ==", "requires": { "arrify": "^2.0.0", "extend": "^3.0.2" } }, "@google-cloud/projectify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-2.1.1.tgz", - "integrity": "sha512-+rssMZHnlh0twl122gXY4/aCrk0G1acBqkHFfYddtsqpYXGxA29nj9V5V9SfC+GyOG00l650f6lG9KL+EpFEWQ==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-3.0.0.tgz", + "integrity": "sha512-HRkZsNmjScY6Li8/kb70wjGlDDyLkVk3KvoEo9uIoxSjYLJasGiCch9+PqRVDOCGUFvEIqyogl+BeqILL4OJHA==" }, "@google-cloud/promisify": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.4.tgz", - "integrity": "sha512-j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-3.0.1.tgz", + "integrity": "sha512-z1CjRjtQyBOYL+5Qr9DdYIfrdLBe746jRTYfaYU6MeXkqp7UfYs/jX16lFFVzZ7PGEJvqZNqYUEtb1mvDww4pA==" }, "@google-cloud/storage": { - "version": "5.18.2", - "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-5.18.2.tgz", - "integrity": "sha512-hL/6epBF2uPt7YtJoOKI6mVxe6RsKBs7S8o2grE0bFGdQKSOngVHBcstH8jDw7aN2rXGouA2TfVTxH+VapY5cg==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-6.7.0.tgz", + "integrity": "sha512-iEit3dvUhGQV3pPC8aci/Y+F6K2QJ/UvcXhymj8gnO8IYQfZSZvFf361yX4BWNUlbHzanUQVQdF9RvgEM8fwpw==", "requires": { - "@google-cloud/common": "^3.8.1", "@google-cloud/paginator": "^3.0.7", - "@google-cloud/promisify": "^2.0.0", + "@google-cloud/projectify": "^3.0.0", + "@google-cloud/promisify": "^3.0.0", "abort-controller": "^3.0.0", - "arrify": "^2.0.0", "async-retry": "^1.3.3", "compressible": "^2.0.12", - "configstore": "^5.0.0", - "date-and-time": "^2.0.0", "duplexify": "^4.0.0", + "ent": "^2.2.0", "extend": "^3.0.2", - "gaxios": "^4.0.0", - "get-stream": "^6.0.0", - "google-auth-library": "^7.0.0", - "hash-stream-validation": "^0.2.2", + "gaxios": "^5.0.0", + "google-auth-library": "^8.0.1", "mime": "^3.0.0", "mime-types": "^2.0.8", "p-limit": "^3.0.1", - "pumpify": "^2.0.0", - "snakeize": "^0.1.0", - "stream-events": "^1.0.4", - "xdg-basedir": "^4.0.0" + "retry-request": "^5.0.0", + "teeny-request": "^8.0.0", + "uuid": "^8.0.0" + }, + "dependencies": { + "@google-cloud/paginator": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.7.tgz", + "integrity": "sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ==", + "requires": { + "arrify": "^2.0.0", + "extend": "^3.0.2" + } + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + } } }, "@grpc/grpc-js": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.6.7.tgz", - "integrity": "sha512-eBM03pu9hd3VqDQG+kHahiG1x80RGkkqqRb1Pchcwqej/KkAH95gAvKs6laqaHCycYaPK+TKuNQnOz9UXYA8qw==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.7.3.tgz", + "integrity": "sha512-H9l79u4kJ2PVSxUNA08HMYAnUBLj9v6KjYQ7SQ71hOZcEXhShE/y5iQCesP8+6/Ik/7i2O0a10bPquIcYfufog==", "requires": { - "@grpc/proto-loader": "^0.6.4", + "@grpc/proto-loader": "^0.7.0", "@types/node": ">=12.12.47" } }, "@grpc/proto-loader": { - "version": "0.6.13", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz", - "integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.3.tgz", + "integrity": "sha512-5dAvoZwna2Py3Ef96Ux9jIkp3iZ62TUsV00p3wVBPNX5K178UbNi8Q7gQVqwXT1Yq9RejIGG9G2IPEo93T6RcA==", "requires": { "@types/long": "^4.0.1", "lodash.camelcase": "^4.3.0", "long": "^4.0.0", - "protobufjs": "^6.11.3", + "protobufjs": "^7.0.0", "yargs": "^16.2.0" } }, "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" } }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, "@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "@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, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@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, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, "@opencensus/core": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/@opencensus/core/-/core-0.1.0.tgz", @@ -3153,6 +3955,13 @@ "semver": "^7.0.0", "shimmer": "^1.2.0", "uuid": "^8.0.0" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + } } }, "@opencensus/exporter-stackdriver": { @@ -3166,6 +3975,18 @@ "googleapis": "67.0.0" }, "dependencies": { + "gaxios": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", + "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", + "requires": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" + } + }, "google-auth-library": { "version": "6.1.6", "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.6.tgz", @@ -3181,6 +4002,32 @@ "jws": "^4.0.0", "lru-cache": "^6.0.0" } + }, + "google-p12-pem": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz", + "integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==", + "requires": { + "node-forge": "^1.3.1" + } + }, + "gtoken": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", + "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", + "requires": { + "gaxios": "^4.0.0", + "google-p12-pem": "^3.1.3", + "jws": "^4.0.0" + } + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } } } }, @@ -3252,15 +4099,34 @@ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" }, + "@types/linkify-it": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" + }, "@types/long": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, + "@types/markdown-it": { + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "requires": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" + }, "@types/node": { - "version": "17.0.41", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.41.tgz", - "integrity": "sha512-xA6drNNeqb5YyV5fO3OAEsnXLfO7uF0whiOfPTz5AeDo8KeZFmODKnvwPymMNO8qE/an8pVY/O50tig2SQCrGw==" + "version": "18.11.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.10.tgz", + "integrity": "sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ==" }, "abort-controller": { "version": "3.0.0", @@ -3280,16 +4146,14 @@ } }, "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 + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, "requires": {} }, "agent-base": { @@ -3328,13 +4192,12 @@ "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "arrify": { "version": "2.0.1", @@ -3368,8 +4231,7 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "devOptional": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base64-js": { "version": "1.5.1", @@ -3377,25 +4239,32 @@ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "bignumber.js": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", - "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==" + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", + "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==" + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "requires": { "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.7", - "raw-body": "2.4.3", - "type-is": "~1.6.18" + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "dependencies": { "debug": { @@ -3409,7 +4278,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, @@ -3417,7 +4286,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3426,7 +4294,7 @@ "buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" }, "bunyan": { "version": "1.8.15", @@ -3444,17 +4312,33 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, + "catharsis": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", + "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", + "requires": { + "lodash": "^4.17.15" + } + }, "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" @@ -3499,31 +4383,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "devOptional": true - }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "requires": { - "is-obj": "^2.0.0" - } - } - } + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "content-disposition": { "version": "0.5.4", @@ -3548,14 +4408,14 @@ } }, "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" }, "cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "cross-spawn": { "version": "7.0.3", @@ -3568,30 +4428,15 @@ "which": "^2.0.1" } }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" - }, - "d64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d64/-/d64-1.0.0.tgz", - "integrity": "sha1-QAKofoUMv8n52XBrYPymE6MzbpA=" - }, "data-uri-to-buffer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==" }, - "date-and-time": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-2.0.1.tgz", - "integrity": "sha512-O7Xe5dLaqvY/aF/MFWArsAM1J4j7w1CSZlPCX9uHgmb+6SbkPd8Q4YOvfvH/cZGvFlJFfHOZKxQtmMUOoZhc/w==" - }, "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } @@ -3599,18 +4444,17 @@ "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" }, "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, "doctrine": { "version": "3.0.0", @@ -3660,7 +4504,7 @@ "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "emitter-listener": { "version": "1.1.2", @@ -3678,7 +4522,7 @@ "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, "end-of-stream": { "version": "1.4.4", @@ -3691,7 +4535,12 @@ "ent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=" + "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==" + }, + "entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" }, "escalade": { "version": "3.1.1", @@ -3701,7 +4550,7 @@ "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "escape-string-regexp": { "version": "4.0.0", @@ -3709,14 +4558,70 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, "eslint": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.9.0.tgz", - "integrity": "sha512-PB09IGwv4F4b0/atrbcMFboF/giawbBLVC7fyDamk5Wtey4Jh2K+rYaBhCAbUyEI4QzB1ly09Uglc9iCtFaG2Q==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.29.0.tgz", + "integrity": "sha512-isQ4EEiyUjZFbEKvEGJKKGBwXtvXX+zJbkVKCgTuB9t/+jUBcy8avhkEwWJecI15BkRkOYmvIM5ynbhRjEkoeg==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.1.0", - "@humanwhocodes/config-array": "^0.9.2", + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -3726,30 +4631,32 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.15.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" } }, "eslint-config-google": { @@ -3789,20 +4696,23 @@ "eslint-visitor-keys": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" }, "espree": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", - "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", - "dev": true, + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "requires": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" } }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, "esquery": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", @@ -3823,20 +4733,18 @@ }, "estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, "event-target-shim": { "version": "5.0.1", @@ -3844,46 +4752,53 @@ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" }, "eventid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eventid/-/eventid-2.0.0.tgz", - "integrity": "sha512-4CYGJ4e2ZkNSr89U/IGzUYOSqppRUCUz37HQX+xk3ArJwK3K1B7TI1PBeWb1umz3rDuMUwPzJCWR44JJS8yEnQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/eventid/-/eventid-2.0.1.tgz", + "integrity": "sha512-sPNTqiMokAvV048P2c9+foqVJzk49o6d4e0D/sq5jog3pw+4kBgyR0gaM1FM7Mx6Kzd9dztesh9oYz1LWWOpzw==", "requires": { - "d64": "^1.0.0", "uuid": "^8.0.0" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + } } }, "express": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", - "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.2", + "body-parser": "1.20.1", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.2", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.9.7", + "qs": "6.11.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.17.2", - "serve-static": "1.14.2", + "send": "0.18.0", + "serve-static": "1.15.0", "setprototypeof": "1.2.0", - "statuses": "~1.5.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -3900,7 +4815,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, @@ -3924,18 +4839,26 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "fast-text-encoding": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", - "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", + "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==" + }, + "fastq": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz", + "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } }, "fetch-blob": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.4.tgz", - "integrity": "sha512-Eq5Xv5+VlSrYWEqKrusxY1C3Hm/hjeAsCGVG3ft7pZahlUAChpGZT/Ms1WmSLnEAisEXszjzu/s+ce6HZB2VHA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", "requires": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" @@ -3951,16 +4874,16 @@ } }, "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "dependencies": { @@ -3975,10 +4898,20 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -3990,9 +4923,9 @@ } }, "flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, "formdata-polyfill": { @@ -4011,30 +4944,27 @@ "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "gaxios": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.2.tgz", - "integrity": "sha512-T+ap6GM6UZ0c4E6yb1y/hy2UB6hTrqhglp3XfmU9qbLCGRYhLVV5aRPpC4EmoG8N8zOnkYCgoBz+ScvGAARY6Q==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.2.tgz", + "integrity": "sha512-TjtV2AJOZoMQqRYoy5eM8cCQogYwazWNYLQ72QB0kwa6vHHruYkGmhhyrlzbmgNHK1dNnuP2WSH81urfzyN2Og==", "requires": { - "abort-controller": "^3.0.0", "extend": "^3.0.2", "https-proxy-agent": "^5.0.0", "is-stream": "^2.0.0", - "node-fetch": "^2.6.1" + "node-fetch": "^2.6.7" }, "dependencies": { "node-fetch": { @@ -4054,6 +4984,28 @@ "requires": { "gaxios": "^4.0.0", "json-bigint": "^1.0.0" + }, + "dependencies": { + "gaxios": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", + "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", + "requires": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" + } + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + } } }, "get-caller-file": { @@ -4061,23 +5013,44 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, - "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==" + "get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } }, "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", "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" + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.1.tgz", + "integrity": "sha512-362NP+zlprccbEt/SkxKfRMHnNY85V74mVnpUpNyr3F35covl09Kec7/sEFLt3RA4oXmewtoaanoIf67SE5Y5g==", + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "glob-parent": { @@ -4090,48 +5063,60 @@ } }, "globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", "dev": true, "requires": { "type-fest": "^0.20.2" } }, "google-auth-library": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.14.0.tgz", - "integrity": "sha512-or8r7qUqGVI3W8lVSdPh0ZpeFyQHeE73g5c0p+bLNTTUFXJ+GSeDQmZRZ2p4H8cF/RJYa4PNvi/A1ar1uVNLFA==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.7.0.tgz", + "integrity": "sha512-1M0NG5VDIvJZEnstHbRdckLZESoJwguinwN8Dhae0j2ZKIQFIV63zxm6Fo6nM4xkgqUr2bbMtV5Dgo+Hy6oo0Q==", "requires": { "arrify": "^2.0.0", "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "fast-text-encoding": "^1.0.0", - "gaxios": "^4.0.0", - "gcp-metadata": "^4.2.0", - "gtoken": "^5.0.4", + "gaxios": "^5.0.0", + "gcp-metadata": "^5.0.0", + "gtoken": "^6.1.0", "jws": "^4.0.0", "lru-cache": "^6.0.0" + }, + "dependencies": { + "gcp-metadata": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.0.1.tgz", + "integrity": "sha512-jiRJ+Fk7e8FH68Z6TLaqwea307OktJpDjmYnU7/li6ziwvVvU2RlrCyQo5vkdeP94chm0kcSCOOszvmuaioq3g==", + "requires": { + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" + } + } } }, "google-gax": { - "version": "2.30.5", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.30.5.tgz", - "integrity": "sha512-Jey13YrAN2hfpozHzbtrwEfEHdStJh1GwaQ2+Akh1k0Tv/EuNVSuBtHZoKSBm5wBMvNsxTsEIZ/152NrYyZgxQ==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.5.2.tgz", + "integrity": "sha512-AyP53w0gHcWlzxm+jSgqCR3Xu4Ld7EpSjhtNBnNhzwwWaIUyphH9kBGNIEH+i4UGkTUXOY29K/Re8EiAvkBRGw==", "requires": { - "@grpc/grpc-js": "~1.6.0", - "@grpc/proto-loader": "^0.6.12", + "@grpc/grpc-js": "~1.7.0", + "@grpc/proto-loader": "^0.7.0", "@types/long": "^4.0.0", "abort-controller": "^3.0.0", "duplexify": "^4.0.0", "fast-text-encoding": "^1.0.3", - "google-auth-library": "^7.14.0", + "google-auth-library": "^8.0.2", "is-stream-ended": "^0.1.4", "node-fetch": "^2.6.1", "object-hash": "^3.0.0", - "proto3-json-serializer": "^0.1.8", - "protobufjs": "6.11.3", - "retry-request": "^4.0.0" + "proto3-json-serializer": "^1.0.0", + "protobufjs": "7.1.2", + "protobufjs-cli": "1.0.2", + "retry-request": "^5.0.0" }, "dependencies": { "node-fetch": { @@ -4145,11 +5130,11 @@ } }, "google-p12-pem": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.3.tgz", - "integrity": "sha512-MC0jISvzymxePDVembypNefkAQp+DRP7dBE+zNUPaIjEspIlYg0++OrsNr248V9tPbz6iqtZ7rX1hxWA5B8qBQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", + "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", "requires": { - "node-forge": "^1.0.0" + "node-forge": "^1.3.1" } }, "googleapis": { @@ -4161,6 +5146,18 @@ "googleapis-common": "^4.4.1" }, "dependencies": { + "gaxios": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", + "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", + "requires": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" + } + }, "google-auth-library": { "version": "6.1.6", "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.6.tgz", @@ -4176,6 +5173,32 @@ "jws": "^4.0.0", "lru-cache": "^6.0.0" } + }, + "google-p12-pem": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz", + "integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==", + "requires": { + "node-forge": "^1.3.1" + } + }, + "gtoken": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", + "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", + "requires": { + "gaxios": "^4.0.0", + "google-p12-pem": "^3.1.3", + "jws": "^4.0.0" + } + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } } } }, @@ -4192,6 +5215,18 @@ "uuid": "^8.0.0" }, "dependencies": { + "gaxios": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", + "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", + "requires": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" + } + }, "google-auth-library": { "version": "6.1.6", "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.6.tgz", @@ -4207,44 +5242,88 @@ "jws": "^4.0.0", "lru-cache": "^6.0.0" } + }, + "google-p12-pem": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz", + "integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==", + "requires": { + "node-forge": "^1.3.1" + } + }, + "gtoken": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", + "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", + "requires": { + "gaxios": "^4.0.0", + "google-p12-pem": "^3.1.3", + "jws": "^4.0.0" + } + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" } } }, "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==" + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true }, "gtoken": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.1.tgz", - "integrity": "sha512-yqOREjzLHcbzz1UrQoxhBtpk8KjrVhuqPE7od1K2uhyxG2BHjKZetlbLw/SPZak/QqTIQW+addS+EcjqQsZbwQ==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", + "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", "requires": { - "gaxios": "^4.0.0", - "google-p12-pem": "^3.0.3", + "gaxios": "^5.0.1", + "google-p12-pem": "^4.0.0", "jws": "^4.0.0" } }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "hash-stream-validation": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/hash-stream-validation/-/hash-stream-validation-0.2.4.tgz", - "integrity": "sha512-Gjzu0Xn7IagXVkSu9cSFuK1fqzwtLwFhNhVL8IFJijRNMgUttFbBSIAzKuSIrsFMO1+g1RlsoN49zPIbwPDMGQ==" + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, "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==", "requires": { - "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" } }, @@ -4259,9 +5338,9 @@ } }, "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==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "requires": { "agent-base": "6", "debug": "4" @@ -4276,9 +5355,9 @@ } }, "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz", + "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==", "dev": true }, "import-fresh": { @@ -4294,13 +5373,13 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "devOptional": true, + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "requires": { "once": "^1.3.0", "wrappy": "1" @@ -4319,7 +5398,7 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, "is-fullwidth-code-point": { @@ -4341,6 +5420,12 @@ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" }, + "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 + }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -4351,15 +5436,16 @@ "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==" }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "js-sdsl": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", "dev": true }, "js-yaml": { @@ -4371,6 +5457,48 @@ "argparse": "^2.0.1" } }, + "js2xmlparser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", + "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", + "requires": { + "xmlcreate": "^2.0.4" + } + }, + "jsdoc": { + "version": "3.6.11", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.11.tgz", + "integrity": "sha512-8UCU0TYeIYD9KeLzEcAu2q8N/mx9O3phAGl32nmHlE0LpaJL71mMkP4d+QE5zWfNt50qheHtOZ0qoxVrsX5TUg==", + "requires": { + "@babel/parser": "^7.9.4", + "@types/markdown-it": "^12.2.3", + "bluebird": "^3.7.2", + "catharsis": "^0.9.0", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.2", + "klaw": "^3.0.0", + "markdown-it": "^12.3.2", + "markdown-it-anchor": "^8.4.1", + "marked": "^4.0.10", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "taffydb": "2.6.2", + "underscore": "~1.13.2" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } + } + }, "json-bigint": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", @@ -4388,7 +5516,7 @@ "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, "jwa": { @@ -4410,6 +5538,14 @@ "safe-buffer": "^5.0.1" } }, + "klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "requires": { + "graceful-fs": "^4.1.9" + } + }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -4420,6 +5556,28 @@ "type-check": "~0.4.0" } }, + "linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "requires": { + "uc.micro": "^1.0.1" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, "lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", @@ -4449,35 +5607,48 @@ "yallist": "^4.0.0" } }, - "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==", + "markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", "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==" - } + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" } }, + "markdown-it-anchor": { + "version": "8.6.5", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.5.tgz", + "integrity": "sha512-PI1qEHHkTNWT+X6Ip9w+paonfIQ+QZP9sCeMYi47oqhH+EsW8CrJ8J7CzV19QVOj6il8ATGbK2nTECj22ZHGvQ==", + "requires": {} + }, + "marked": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.3.tgz", + "integrity": "sha512-slWRdJkbTZ+PjkyJnE30Uid64eHwbwa1Q25INCAYfZlK4o6ylagBy/Le9eWntqJFoFT93ikUKMv47GZ4gTwHkw==" + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" }, "mime": { "version": "3.0.0", @@ -4485,40 +5656,38 @@ "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==" }, "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==" }, "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==", "requires": { - "mime-db": "1.51.0" + "mime-db": "1.52.0" } }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "optional": true + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" }, "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==", "optional": true, "requires": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" } }, "moment": { @@ -4535,7 +5704,7 @@ "mv": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", + "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", "optional": true, "requires": { "mkdirp": "~0.5.1", @@ -4546,7 +5715,7 @@ "glob": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", "optional": true, "requires": { "inflight": "^1.0.4", @@ -4559,7 +5728,7 @@ "rimraf": { "version": "2.4.5", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", + "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", "optional": true, "requires": { "glob": "^6.0.1" @@ -4568,21 +5737,21 @@ } }, "nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", "optional": true }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, "ncp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", + "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", "optional": true }, "negotiator": { @@ -4596,9 +5765,9 @@ "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" }, "node-fetch": { - "version": "3.2.10", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.10.tgz", - "integrity": "sha512-MhuzNwdURnZ1Cp4XTazr69K0BTizsBroX7Zx3UgDSVcZYKF/6p0CBe4EUb/hLqmzVhl0UpYfgRljQ4yxE+iCxA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.0.tgz", + "integrity": "sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==", "requires": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -4606,19 +5775,24 @@ } }, "node-forge": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.0.tgz", - "integrity": "sha512-08ARB91bUi6zNKzVmaj3QO7cr397uiDT2nJ63cHjyNtCTWIgvS47j3eT0WfzUwS9+6Z5YshRaoasFkXCKrIYbA==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" }, "object-hash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, "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==", "requires": { "ee-first": "1.1.1" } @@ -4626,7 +5800,7 @@ "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "requires": { "wrappy": "1" } @@ -4653,6 +5827,15 @@ "yocto-queue": "^0.1.0" } }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -4667,11 +5850,16 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, + "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=", - "devOptional": true + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, "path-key": { "version": "3.1.1", @@ -4682,7 +5870,7 @@ "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=" + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, "prelude-ls": { "version": "1.2.1", @@ -4693,20 +5881,20 @@ "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" }, "proto3-json-serializer": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-0.1.9.tgz", - "integrity": "sha512-A60IisqvnuI45qNRygJjrnNjX2TMdQGMY+57tR3nul3ZgO2zXkR9OGR8AXxJhkqx84g0FTnrfi3D5fWMSdANdQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.1.0.tgz", + "integrity": "sha512-SjXwUWe/vANGs/mJJTbw5++7U67nwsymg7qsoPtw6GiXqw3kUy8ByojrlEdVE2efxAdKreX8WkDafxvYW95ZQg==", "requires": { - "protobufjs": "^6.11.2" + "protobufjs": "^7.0.0" } }, "protobufjs": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", - "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.1.2.tgz", + "integrity": "sha512-4ZPTPkXCdel3+L81yw3dG6+Kq3umdWKh7Dc7GW/CpNk4SX3hK58iPCWeCyhVTDrbkNeKrYNZ7EojM5WDaEWTLQ==", "requires": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -4718,9 +5906,32 @@ "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", "@types/node": ">=13.7.0", - "long": "^4.0.0" + "long": "^5.0.0" + }, + "dependencies": { + "long": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", + "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" + } + } + }, + "protobufjs-cli": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.0.2.tgz", + "integrity": "sha512-cz9Pq9p/Zs7okc6avH20W7QuyjTclwJPgqXG11jNaulfS3nbVisID8rC+prfgq0gbZE0w9LBFd1OKFF03kgFzg==", + "requires": { + "chalk": "^4.0.0", + "escodegen": "^1.13.0", + "espree": "^9.0.0", + "estraverse": "^5.1.0", + "glob": "^8.0.0", + "jsdoc": "^3.6.3", + "minimist": "^1.2.0", + "semver": "^7.1.2", + "tmp": "^0.2.1", + "uglify-js": "^3.7.7" } }, "proxy-addr": { @@ -4758,9 +5969,18 @@ "dev": true }, "qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==" + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "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 }, "range-parser": { "version": "1.2.1", @@ -4768,12 +5988,12 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", - "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "requires": { "bytes": "3.1.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" } @@ -4799,6 +6019,14 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" }, + "requizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", + "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", + "requires": { + "lodash": "^4.17.21" + } + }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -4811,21 +6039,50 @@ "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" }, "retry-request": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz", - "integrity": "sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-5.0.2.tgz", + "integrity": "sha512-wfI3pk7EE80lCIXprqh7ym48IHYdwmAAzESdbU8Q9l7pnRCk9LEhpbOTNKjz6FARLm/Bl5m+4F0ABxOkYUujSQ==", "requires": { "debug": "^4.1.1", "extend": "^3.0.2" } }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "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" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "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" } }, "safe-buffer": { @@ -4845,31 +6102,31 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "requires": { "lru-cache": "^6.0.0" } }, "send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "requires": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "dependencies": { "debug": { @@ -4883,7 +6140,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, @@ -4900,14 +6157,14 @@ } }, "serve-static": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", - "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.2" + "send": "0.18.0" } }, "setprototypeof": { @@ -4935,20 +6192,26 @@ "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" }, - "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==" + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } }, - "snakeize": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/snakeize/-/snakeize-0.1.0.tgz", - "integrity": "sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0=" + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true }, "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, "stream-events": { "version": "1.0.5", @@ -4992,33 +6255,36 @@ "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, "stubs": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", - "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=" + "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==" }, "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" } }, + "taffydb": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", + "integrity": "sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA==" + }, "teeny-request": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-7.1.3.tgz", - "integrity": "sha512-Ew3aoFzgQEatLA5OBIjdr1DWJUaC1xardG+qbPPo5k/y/3fMwXLxpjh5UB5dVfElktLaQbbMs80chkz53ByvSg==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-8.0.2.tgz", + "integrity": "sha512-34pe0a4zASseXZCKdeTiIZqSKA8ETHb1EwItZr01PAR3CLPojeAKgSjzeNS4373gi59hNulyDrPKEbh2zO9sCg==", "requires": { "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "node-fetch": "^2.6.1", "stream-events": "^1.0.5", - "uuid": "^8.0.0" + "uuid": "^9.0.0" }, "dependencies": { "node-fetch": { @@ -5034,9 +6300,17 @@ "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "requires": { + "rimraf": "^3.0.0" + } + }, "toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -5045,7 +6319,7 @@ "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "type-check": { "version": "0.4.0", @@ -5071,26 +6345,25 @@ "mime-types": "~2.1.24" } }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "requires": { - "crypto-random-string": "^2.0.0" - } + "uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==" + }, + "underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, "uri-js": { "version": "4.4.1", @@ -5104,48 +6377,42 @@ "url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", - "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=" + "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" }, "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, "web-streams-polyfill": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz", - "integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==" }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -5163,8 +6430,7 @@ "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "wrap-ansi": { "version": "7.0.0", @@ -5179,23 +6445,12 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, - "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + "xmlcreate": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", + "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" }, "y18n": { "version": "5.0.8", diff --git a/cloudrun-malware-scanner/package.json b/cloudrun-malware-scanner/package.json index c083f61..3bce99e 100644 --- a/cloudrun-malware-scanner/package.json +++ b/cloudrun-malware-scanner/package.json @@ -1,6 +1,6 @@ { "name": "gcs-malware-scanner", - "version": "1.7.0", + "version": "2.0.0", "description": "Service to scan GCS documents for the malware and move the analyzed documents to appropriate buckets", "main": "index.js", "scripts": { @@ -12,21 +12,21 @@ "author": "Google Inc.", "license": "Apache-2.0", "dependencies": { - "@google-cloud/common": "^3.10.0", - "@google-cloud/logging-bunyan": "^3.2.0", - "@google-cloud/monitoring": "^2.3.5", - "@google-cloud/storage": "^5.18.2", + "@google-cloud/common": "^4.0.3", + "@google-cloud/logging-bunyan": "^4.2.2", + "@google-cloud/monitoring": "^3.0.3", + "@google-cloud/storage": "^6.7.0", "@opencensus/core": "^0.1.0", "@opencensus/exporter-stackdriver": "^0.1.0", "bunyan": "^1.8.15", "clamdjs": "^1.0.2", - "express": "^4.17.3", - "google-auth-library": "^7.14.0", - "node-fetch": "^3.2.10", + "express": "^4.18.2", + "google-auth-library": "^8.7.0", + "node-fetch": "^3.3.0", "process": "^0.11.10" }, "devDependencies": { - "eslint": "^8.9.0", + "eslint": "^8.29.0", "eslint-config-google": "^0.14.0" } } diff --git a/cloudrun-malware-scanner/server.js b/cloudrun-malware-scanner/server.js index b3e563d..4d40fb9 100644 --- a/cloudrun-malware-scanner/server.js +++ b/cloudrun-malware-scanner/server.js @@ -1,5 +1,5 @@ /* -* Copyright 2021 Google LLC +* Copyright 2022 Google LLC * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,6 +22,9 @@ const {GoogleAuth} = require('google-auth-library'); const {logger} = require('./logger.js'); const pkgJson = require('./package.json'); const metrics = require('./metrics.js'); +const util = require('node:util'); +const execFile = util.promisify(require('node:child_process').execFile); +const {setTimeout} = require('timers/promises'); const PORT = process.env.PORT || 8080; const CLAMD_HOST = '127.0.0.1'; @@ -41,12 +44,12 @@ const CLAMD_TIMEOUT = 600000; // large enough. const MAX_FILE_SIZE = 500000000; // 500MiB +const CONFIG_FILE = './config.json'; + /** * Configuration object. * - * Values are read from the environment variable CONFIG_FILE (which specifies a - * JSON file to read the config from) or single-bucket config variables: - * UNSCANNED_BUCKET, CLEAN_BUCKET and QUARANTINED_BUCKET. + * Values are read from the CONFIG_FILE * See {@link readAndVerifyConfig}. * * @type {{ @@ -55,11 +58,13 @@ const MAX_FILE_SIZE = 500000000; // 500MiB * unscanned: string, * clean: string, * quarantined: string - * }> + * }>, + * ClamCvdMirrorBucket: string * }} */ const BUCKET_CONFIG = { buckets: [], + ClamCvdMirrorBucket: '', }; // Create Clients. @@ -74,7 +79,7 @@ const storage = new Storage(); * * For command line testing, use * - * curl -d '{"kind": "storage#object","name":"sparse_file_1G", "bucket": "BUCKET_NAME" }' -H "Content-Type: application/json" http://localhost:8080 + * curl -d '{"kind": "storage#object","name":"test_file", "bucket": "BUCKET_NAME" }' -H "Content-Type: application/json" http://localhost:8080 * * * @param {!Request} req The request payload @@ -82,11 +87,31 @@ const storage = new Storage(); */ app.post('/', async (req, res) => { // Sanity check required values. - if (!req.body || req.body.kind !== 'storage#object') { - handleErrorResponse(res, 200, `${req.body} is not a GCS Storage Object`); - return; + switch (req.body.kind) { + case 'storage#object': + await handleGcsObject(req, res); + break; + case 'schedule#cvd_update': + await handleCvdUpdate(req, res); + break; + default: + handleErrorResponse( + res, + 200, + `${JSON.stringify(req.body)} is not supported` + + '(kind must be storage#object or schedule#cvd_update'); + break; } +}); + +/** + * Handle a POST with a GCS object payload. + * + * @param {!Request} req The request payload + * @param {!Response} res The HTTP response object + */ +async function handleGcsObject(req, res) { const file = req.body; try { if (!file.name) { @@ -97,11 +122,12 @@ app.post('/', async (req, res) => { handleErrorResponse(res, 200, `bucket name not specified in ${file}`); return; } - if (file.size > MAX_FILE_SIZE) { + const fileSize = parseInt(file.size); + if ( fileSize > MAX_FILE_SIZE) { handleErrorResponse( res, 200, `file gs://${file.bucket}/${file.name} too large for scanning at ${ - file.size} bytes`, + fileSize} bytes`, file.bucket); return; } @@ -117,14 +143,15 @@ app.post('/', async (req, res) => { // File.exists() returns a FileExistsResponse, which is a list with a // single value. if (! (await gcsFile.exists())[0]) { - handleErrorResponse(res, 200, - `File: gs://${file.bucket}/${file.name} does not exist`); + // Warn but return successful to client. + logger.warn(`Ignoring no longer existing file: gs://${file.bucket}/${file.name}`); + res.json({status: 'deleted'}); return; } const clamdVersion = await getClamVersion(); logger.info(`Scan request for gs://${file.bucket}/${file.name}, (${ - file.size} bytes) scanning with clam ${clamdVersion}`); + fileSize} bytes) scanning with clam ${clamdVersion}`); const startTime = Date.now(); const readStream = await gcsFile.createReadStream(); let result; @@ -139,8 +166,8 @@ app.post('/', async (req, res) => { if (clamd.isCleanReply(result)) { logger.info(`Scan status for gs://${file.bucket}/${file.name}: CLEAN (${ - file.size} bytes in ${scanDuration} ms)`); - metrics.writeScanClean(config.unscanned, config.clean, file.size, + fileSize} bytes in ${scanDuration} ms)`); + metrics.writeScanClean(config.unscanned, config.clean, fileSize, scanDuration, clamdVersion); // Move document to the bucket that holds clean documents. This can @@ -152,8 +179,8 @@ app.post('/', async (req, res) => { } else { logger.warn(`Scan status for gs://${file.bucket}/${ file.name}: INFECTED ${result} (${ - file.size} bytes in ${scanDuration} ms)`); - metrics.writeScanInfected(config.unscanned, config.quarantined, file.size, + fileSize} bytes in ${scanDuration} ms)`); + metrics.writeScanInfected(config.unscanned, config.quarantined, fileSize, scanDuration, clamdVersion); // Move document to the bucket that holds infected documents. This can @@ -177,7 +204,7 @@ app.post('/', async (req, res) => { // A 500 will cause Pubsub/EventArc to retry the event. let statusCode=500; - if ((e instanceof ApiError) && [403, 404].includes(e.code) ) { + if ([403, 404].includes(e.code) ) { // Permission denied/file not found can be raised by the stream reading // and by the object move. They cannot be retried, so respond // with success, but log the error. @@ -188,7 +215,48 @@ app.post('/', async (req, res) => { `gs://${file.bucket}/${file.name}: ${e.message}`, file.bucket); } -}); +} + + +/** + * Triggers a update check on the CVD Mirror GCS bucket. + * + * @param {!Request} req The request payload + * @param {!Response} res The HTTP response object + */ +async function handleCvdUpdate(req, res) { + try { + logger.info('Starting CVD Mirror update'); + const result = await execFile( + './updateCvdMirror.sh', + [BUCKET_CONFIG.ClamCvdMirrorBucket], + {stdio: ['ignore', 'inherit', 'inherit']}); + logger.info('CVD Mirror update check complete. output:\n'+result.stdout); + // look for updated versions in output by looking for + // "updated (version: " from freshclam output. + const newVersions = (result.stdout + .split('\n') + // Look for lines beginning with Downloaded + .filter((line) => line.indexOf('Downloaded') >= 0)); + for (const version of newVersions) { + logger.info(`CVD Mirror updated: ${version}`); + } + res.json({ + status: 'CvdUpdateComplete', + updated: newVersions.length > 0}); + metrics.writeCvdMirrorUpdated(true, newVersions.length > 0); + } catch (e) { + logger.error( + {err: e.message}, + `Failure when running updateCvdMirror: %s\ncode: %s, stderr:\n%s`, + e.message, + e.code, + e.stderr); + metrics.writeCvdMirrorUpdated(false, false); + res.status(500).json({message: e.message, status: 'CvdUpdateError'}); + } +} + /** * Trivial handler for get requests which returns the clam version. @@ -207,7 +275,6 @@ app.get('/', async (req, res) => { Using Clam AV version: ${await getClamVersion()} ${pkgJson.description} -(Responds to POST requests containing a GCS object only) `); }); @@ -240,6 +307,7 @@ async function getClamVersion() { /** * Move the file to the appropriate bucket. + * @async * @param {string} filename * @param {boolean} isClean * @param {!Object} config @@ -253,41 +321,25 @@ async function moveProcessedFile(filename, isClean, config) { } /** - * Read configuration from process environmental variables. + * Read configuration from CONFIG_FILE + * and store in BUCKET_CONFIG global * - * Can be CONFIG_FILE for a JSON file, or single-bucket config - * variables: UNSCANNED_BUCKET, CLEAN_BUCKET and - * QUARANTINED_BUCKET + * @async */ async function readAndVerifyConfig() { - if (process.env.CONFIG_FILE) { - if (!process.env.CONFIG_FILE.endsWith('.json')) { - throw new Error(`CONFIG_FILE="${ - process.env.CONFIG_FILE}" should end with ".json"`); - } - try { - const envConfig = require(process.env.CONFIG_FILE); - BUCKET_CONFIG.buckets = envConfig.buckets; - } catch (e) { - logger.fatal( - {err: e}, - `Unable to read JSON file from CONFIG_FILE="${ - process.env.CONFIG_FILE}"`); - throw new Error(`Invalid configuration CONFIG_FILE="${ - process.env.CONFIG_FILE}"`); - } - } else if (process.env.UNSCANNED_BUCKET && process.env.CLEAN_BUCKET && - process.env.QUARANTINED_BUCKET) { - // Simple config for single-bucket scanning. - BUCKET_CONFIG.buckets = [{ - unscanned: process.env.UNSCANNED_BUCKET, - clean: process.env.CLEAN_BUCKET, - quarantined: process.env.QUARANTINED_BUCKET, - }]; + try { + const config = require(CONFIG_FILE); + delete config.comments; + Object.assign(BUCKET_CONFIG, config); + } catch (e) { + logger.fatal( + {err: e}, + `Unable to read JSON file from ${CONFIG_FILE}`); + throw new Error(`Invalid configuration ${CONFIG_FILE}`); } if (BUCKET_CONFIG.buckets.length === 0) { - logger.fatal(`No buckets configured for scanning`); + logger.fatal(`No buckets configured for scanning in ${CONFIG_FILE}`); throw new Error('No buckets configured'); } @@ -298,41 +350,88 @@ async function readAndVerifyConfig() { for (let x = 0; x < BUCKET_CONFIG.buckets.length; x++) { const config = BUCKET_CONFIG.buckets[x]; for (const bucketType of ['unscanned', 'clean', 'quarantined']) { - const bucketName = config[bucketType]; - if (!bucketName) { - logger.fatal(`Error in bucket config[${x}]: no "${ - bucketType}" bucket defined`); - success = false; - } - // Check for bucket existence by listing files in bucket, will throw - // an exception if the bucket is not readable. - // This is used in place of Bucket.exists() to avoid the need for - // Project/viewer permission. - try { - await storage.bucket(bucketName).getFiles( - {maxResults: 1, prefix: 'zzz', autoPaginate: false}); - } catch (e) { - logger.fatal(`Error in bucket config[${x}]: cannot view files in "${ - bucketType}" bucket: ${bucketName} : ${e.message}`); - logger.debug({err: e}); - success = false; + if ( !(await checkBucketExists( + config[bucketType], + `config.buckets[${x}].${bucketType}`))) { + success=false; } } if (config.unscanned === config.clean || config.unscanned === config.quarantined || config.clean === config.quarantined) { logger.fatal( - `Error in bucket config[${x}]: bucket names are not unique`); + `Error in ${CONFIG_FILE} buckets[${x}]: bucket names are not unique`); success = false; } } + if ( !(await checkBucketExists( + BUCKET_CONFIG.ClamCvdMirrorBucket, + 'ClamCvdMirrorBucket'))) { + success=false; + } + if (!success) { throw new Error('Invalid configuration'); } } + +/** + * Check that given bucket exists. Returns true on success + * + * @param {string} bucketName + * @param {string} configName + * @return {Promise} + */ +async function checkBucketExists(bucketName, configName) { + if (!bucketName) { + logger.fatal(`Error in config: no "${configName}" bucket defined`); + success = false; + } + // Check for bucket existence by listing files in bucket, will throw + // an exception if the bucket is not readable. + // This is used in place of Bucket.exists() to avoid the need for + // Project/viewer permission. + try { + await storage.bucket(bucketName).getFiles( + {maxResults: 1, prefix: 'zzz', autoPaginate: false}); + return true; + } catch (e) { + logger.fatal( + `Error in config: cannot view files in "${ + configName}" : ${bucketName} : ${e.message}`); + logger.debug({err: e}); + return false; + } +} + + +/** + * Wait up to 5 mins for ClamD to respond + */ +async function waitForClamD() { + const timeoutMins = 10; + const endTime=Date.now() + timeoutMins*60*1000; + + logger.info('Waiting for Clamd'); + while (Date.now() < endTime) { + try { + const version = await getClamVersion(); + logger.info(`Clamd started with version ${version}`); + return; + } catch (e) { + logger.warn(`Waiting for clamd to start: ${e.message}`); + } + await setTimeout(10000); + } + logger.fatal(`Clamd not started after ${timeoutMins} mins`); + process.exit(1); +} + /** * Perform async setup and start the app. + * + * @async */ async function run() { let projectId = process.env.PROJECT_ID; @@ -342,6 +441,7 @@ async function run() { } await metrics.init(projectId); await readAndVerifyConfig(); + await waitForClamD(); app.listen(PORT, () => { logger.info( diff --git a/cloudrun-malware-scanner/updateCvdMirror.sh b/cloudrun-malware-scanner/updateCvdMirror.sh new file mode 100755 index 0000000..6aec291 --- /dev/null +++ b/cloudrun-malware-scanner/updateCvdMirror.sh @@ -0,0 +1,93 @@ +#!/bin/bash +# +# Copyright 2022 Google LLC +# +# 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 +# +# https://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. + + +# Utility to populate and update a local copy of the ClamAV virus definitions +# in a Cloud Storage bucket. +# +# This uses the ClamAV private mirror update tool. +# https://github.com/Cisco-Talos/cvdupdate + +CMD=$(basename "$0") + +CVD_MIRROR_BUCKET="$1" +if [[ -z "${CVD_MIRROR_BUCKET}" ]] ; then + echo "Usage: ${CMD} CVD_MIRROR_BUCKET_NAME" >&2 + exit 1 +fi + +# Use a GCS file as a mutex to prevent multiple updates from happening at once +# which may be possible if multiple cloud run instances are started. +LOCKFILE_NAME=cdvupdates.lock +LOCKFILE_PATH="gs://${CVD_MIRROR_BUCKET}/${LOCKFILE_NAME}" +LOCKFILE_EXPIRY_MINS=10 + +# Use gcloud storage cp to create a lockfile containing the current timestamp +# --if-generation-match=0 will cause the cp to fail if the file already exists +# and the loop will then be executed. This makes the command an atomic +# "create-if-not-exists" operation. +echo "${CMD} Attempting to create ${LOCKFILE_PATH}" +while ! { + date +%s > /tmp/${LOCKFILE_NAME} && \ + gcloud storage cp --quiet \ + /tmp/${LOCKFILE_NAME} \ + "${LOCKFILE_PATH}" \ + --if-generation-match=0 2>/dev/null >/dev/null + } +do + # Lockfile exists - check that it has not expired. + LOCK_EXPIRED_TIMESTAMP="$(date +%s --date="now - ${LOCKFILE_EXPIRY_MINS} minutes")" + LOCKFILE_TIMESTAMP=$(gsutil -q cat "${LOCKFILE_PATH}" 2>/dev/null ) + if [[ "${LOCKFILE_TIMESTAMP}" && "${LOCKFILE_TIMESTAMP}" -lt "${LOCK_EXPIRED_TIMESTAMP}" ]] ; then + echo "${CMD} ${LOCKFILE_PATH} has expired, removing" + gsutil -q rm "${LOCKFILE_PATH}" + LOCKFILE_TIMESTAMP="" + else + # Lockfile created recently, wait for it to be removed or expire + echo "${CMD} Waiting for ${LOCKFILE_PATH}" + sleep 30 + fi +done +echo "${CMD} successfully created ${LOCKFILE_PATH}" + +# Ensure lockfile is removed on exit. +trap "echo ${CMD} removing ${LOCKFILE_PATH} ; gsutil -q rm ${LOCKFILE_PATH}" EXIT + +# Copy the existing CVDs from GCS to a local directory. +# ignore errors as it implies empty db in mirror (ie first run). +mkdir -p ./cvds +echo "${CMD} Downloading CVD mirror from gs://${CVD_MIRROR_BUCKET}/cvds" +gsutil -m -q rsync -d -c -r -x cvds/log "gs://${CVD_MIRROR_BUCKET}/cvds" ./cvds + +set -o errexit + +if [[ ! -e ./cvds/config.json ]] ; then + # Create an initial cvdupdater config to use local directory. + cvdupdate config set -c ./cvds/config.json -d ./cvds -l ./cvds/log +fi + +# Update databases in local directory +echo "${CMD} Checking for CVD Updates" +cvdupdate update -V -c ./cvds/config.json + +# show logs on success (failures will have been reported to stderr) +cat ./cvds/log/*.log + +# Push any updated databases back to GCS +echo "${CMD} Updating CVD mirror at gs://${CVD_MIRROR_BUCKET}/cvds" +gsutil -m -q rsync -d -c -r -x '.*\.log' ./cvds "gs://${CVD_MIRROR_BUCKET}/cvds" + +echo "${CMD} completed" From 810a65296b76b4d64de6bb017b2e55a62cb8fd8c Mon Sep 17 00:00:00 2001 From: "nielm@google.com" Date: Mon, 5 Dec 2022 20:05:00 +0000 Subject: [PATCH 06/11] Fix typo in README --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 4fa5fde..c0b4bbb 100755 --- a/README.md +++ b/README.md @@ -151,10 +151,10 @@ Assuming that you already have a v1.7.0 service installed, perform the following ```shell while : ; do - # set MINUTE to a random number between 3 and 57 - MINUTE="$((RANDOM%55 + 3))" - # exit loop if MINUTE is not a multiple of 10 - [[ $((MINUTE % 10)) != 0 ]] && break + # set MINUTE to a random number between 3 and 57 + MINUTE="$((RANDOM%55 + 3))" + # exit loop if MINUTE is not a multiple of 10 + [[ $((MINUTE % 10)) != 0 ]] && break done gcloud scheduler jobs create http \ @@ -173,9 +173,9 @@ Assuming that you already have a v1.7.0 service installed, perform the following The value given indicates that it should run at the specific randomly-generated minute every 2 hours. - This job will only update the ClamAV *mirror* in {{storage_name_short}}. The + This job will only update the ClamAV *mirror* in Cloud Storage. The [ClamAV freshclam daemon](https://docs.clamav.net/manual/Usage/SignatureManagement.html#freshclam){: target="external" track-type="solution" track-name="externalLink" track-metadata-position="body" } - in each instance of the {{cloud_run_name_short}} will check the mirror every + in each instance of the Cloud Run job will check the mirror every thirty minutes for new definitions, and update the ClamAV daemon. You can force this job to run at any time using the command: From cabed374820f7d133464e224419bc0941ca6df60 Mon Sep 17 00:00:00 2001 From: Ray Huck <42622142+RayHuck@users.noreply.github.com> Date: Tue, 16 May 2023 08:24:36 -0500 Subject: [PATCH 07/11] Fix Readme Typos (#45) --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c0b4bbb..f1ee4b4 100755 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ v2.x uses the `config.json` file for passing the bucket configuration - previous v2.x requires the following additional services * An additional Cloud Storage bucket for the ClamAV database mirror -* A Cloud Scheduler job to trigger updating of the Cloud Storage mirror. This causes the containter to run the [updateCvdMirror.sh](cloudrun-malware-scanner/updateCvdMirror.sh). +* A Cloud Scheduler job to trigger updating of the Cloud Storage mirror. This causes the container to run the [updateCvdMirror.sh](cloudrun-malware-scanner/updateCvdMirror.sh). ### Upgrade instructions @@ -199,7 +199,7 @@ Assuming that you already have a v1.7.0 service installed, perform the following **malware-scanner** -You can see the malware definitions mirror update checkss from the following log lines: +You can see the malware definitions mirror update checks from the following log lines: ``` Starting CVD Mirror update From f5dca4bd62d3d6cfbb59bb7c7f88e2768cde897c Mon Sep 17 00:00:00 2001 From: Niel Markwick Date: Mon, 19 Jun 2023 17:18:58 +0200 Subject: [PATCH 08/11] Fix keyring issue with Google Cloud APT key (#51) --- cloudrun-malware-scanner/Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cloudrun-malware-scanner/Dockerfile b/cloudrun-malware-scanner/Dockerfile index 627b368..dc9c09b 100644 --- a/cloudrun-malware-scanner/Dockerfile +++ b/cloudrun-malware-scanner/Dockerfile @@ -44,6 +44,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \ apt-transport-https \ lsb-release \ openssh-client \ + gnupg \ jq \ gawk \ clamav-daemon \ @@ -60,9 +61,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \ echo -n "Adding Cloud SDK apt repository: " && \ echo "deb https://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" \ | tee /etc/apt/sources.list.d/google-cloud-sdk.list && \ - curl -s \ - https://packages.cloud.google.com/apt/doc/apt-key.gpg \ - -o /etc/apt/trusted.gpg.d/packages-cloud-google-apt.gpg && \ + curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg \ + | gpg --dearmor -o /etc/apt/trusted.gpg.d/packages-cloud-google-apt.gpg && \ apt-get update -qqy && \ apt-get install -qqy --no-install-recommends \ google-cloud-sdk && \ From f4910e92a238c01c07a3202c893c5b8433ae3dcf Mon Sep 17 00:00:00 2001 From: nielm Date: Mon, 19 Jun 2023 14:33:01 +0200 Subject: [PATCH 09/11] Don't install pip3 packages globally Use debian managed python3-crcmod Use pipx to install cvdupdate Update to Node:20 Update Npm dependancies --- cloudrun-malware-scanner/Dockerfile | 16 +- cloudrun-malware-scanner/bootstrap.sh | 11 +- cloudrun-malware-scanner/package-lock.json | 988 +++++++++++--------- cloudrun-malware-scanner/updateCvdMirror.sh | 18 +- 4 files changed, 549 insertions(+), 484 deletions(-) diff --git a/cloudrun-malware-scanner/Dockerfile b/cloudrun-malware-scanner/Dockerfile index dc9c09b..d8645e9 100644 --- a/cloudrun-malware-scanner/Dockerfile +++ b/cloudrun-malware-scanner/Dockerfile @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM node:18 +FROM node:20 WORKDIR /app COPY . /app COPY config.json /app @@ -26,7 +26,7 @@ COPY config.json /app # but the latest package will actually get installed by bootstrap.sh # when the container starts. # -# This is because +# This is because # a) clamav cannot be installed only in container startup due to unable to # create some symlinks and config files in the container runtime. # b) clamav cannot be installed here, then updated when the container starts @@ -41,22 +41,21 @@ RUN export DEBIAN_FRONTEND=noninteractive && \ apt-get install -qqy --no-install-recommends \ curl \ python3-pip \ + pipx \ apt-transport-https \ lsb-release \ openssh-client \ - gnupg \ + gnupg \ jq \ gawk \ clamav-daemon \ - clamav-freshclam && \ + clamav-freshclam \ + python3-crcmod && \ apt-get -qqy remove \ libclamav9 \ clamav-base \ clamav-daemon \ clamav-freshclam && \ - pip3 install --upgrade \ - crcmod \ - cvdupdate && \ CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)" && \ echo -n "Adding Cloud SDK apt repository: " && \ echo "deb https://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" \ @@ -64,8 +63,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg \ | gpg --dearmor -o /etc/apt/trusted.gpg.d/packages-cloud-google-apt.gpg && \ apt-get update -qqy && \ - apt-get install -qqy --no-install-recommends \ - google-cloud-sdk && \ + apt-get install -qqy --no-install-recommends google-cloud-sdk && \ gcloud config set core/disable_usage_reporting true && \ gcloud config set component_manager/disable_update_check true && \ gcloud config set metrics/environment github_docker_image && \ diff --git a/cloudrun-malware-scanner/bootstrap.sh b/cloudrun-malware-scanner/bootstrap.sh index 0f83faa..453b1b7 100755 --- a/cloudrun-malware-scanner/bootstrap.sh +++ b/cloudrun-malware-scanner/bootstrap.sh @@ -44,18 +44,19 @@ Log INFO main "Installing latest clamAV and CVDUpdate" export DEBIAN_FRONTEND=noninteractive apt-get -qqy update apt-get -qqy install --no-install-recommends clamav-daemon clamav-freshclam -pip3 install --upgrade cvdupdate +export PATH="$PATH:$HOME/.local/bin" # add pipx locations to path. +pipx install cvdupdate # Set up an authentication proxy server to point to GCS CVD Mirror bucket, and to # restart with a fresh token every 50 mins because access tokens expire after 1hr AUTH_SERVER_ADDRESS=127.0.0.1:8001 -while true ; do +while true ; do Log INFO main "Restarting authentication proxy service" ./cloud-run-proxy \ -host https://storage.googleapis.com/ \ -token "$(gcloud auth print-access-token)" \ -bind "${AUTH_SERVER_ADDRESS}" \ - -server-up-time 50m + -server-up-time 50m done & @@ -81,7 +82,7 @@ if ! gsutil ls "gs://${CVD_MIRROR_BUCKET}/" > /dev/null ; then fi # This function is used to update clam and freshclam config files. -# Use by specifying the config file on the command line and +# Use by specifying the config file on the command line and # piping the config file updates in. # # Note: clamav takes the _first_ config value found in the file, so first @@ -100,7 +101,7 @@ function updateClamConfigFile { grep -vE "^(XXXXXXXXXX|${MODIFIED_PARAMS})\s" "${CLAM_CONFIG_FILE}" > "${CLAM_CONFIG_TMPFILE}" # Append updates cat "${UPDATE_TMPFILE}" >> "${CLAM_CONFIG_TMPFILE}" - + mv "${CLAM_CONFIG_TMPFILE}" "${CLAM_CONFIG_FILE}" chmod go+r "${CLAM_CONFIG_FILE}" Log INFO updateClamConfigFile "Updated ${CLAM_CONFIG_FILE} with parameters: ${MODIFIED_PARAMS}" diff --git a/cloudrun-malware-scanner/package-lock.json b/cloudrun-malware-scanner/package-lock.json index f3b9cc3..25c1b02 100644 --- a/cloudrun-malware-scanner/package-lock.json +++ b/cloudrun-malware-scanner/package-lock.json @@ -28,9 +28,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", - "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", + "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", "bin": { "parser": "bin/babel-parser.js" }, @@ -38,16 +38,40 @@ "node": ">=6.0.0" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", + "espree": "^9.5.2", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -61,6 +85,15 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/js": { + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz", + "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@google-cloud/common": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-4.0.3.tgz", @@ -81,9 +114,9 @@ } }, "node_modules/@google-cloud/logging": { - "version": "10.3.2", - "resolved": "https://registry.npmjs.org/@google-cloud/logging/-/logging-10.3.2.tgz", - "integrity": "sha512-asINa/B1iiuEGjJP2O973YcpOAwHstLI022oC+pVBzpnifjZgtLwjCuDJlhRVuOdrYHr3vaAGaRxHEN2VdX6Ng==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@google-cloud/logging/-/logging-10.5.0.tgz", + "integrity": "sha512-XmlNs6B8lDZvFwFB5M55g9ch873AA2rXSuFOczQ3FOAzuyd/qksf18suFJfcrLMu8lYSr3SQhTE45FlXz4p9pg==", "dependencies": { "@google-cloud/common": "^4.0.0", "@google-cloud/paginator": "^4.0.0", @@ -95,7 +128,7 @@ "extend": "^3.0.2", "gcp-metadata": "^4.0.0", "google-auth-library": "^8.0.2", - "google-gax": "^3.5.2", + "google-gax": "^3.5.8", "on-finished": "^2.3.0", "pumpify": "^2.0.1", "stream-events": "^1.0.5", @@ -121,11 +154,11 @@ } }, "node_modules/@google-cloud/monitoring": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@google-cloud/monitoring/-/monitoring-3.0.3.tgz", - "integrity": "sha512-SIm1EUYwrb0HKvjdc+1LyL2naGU+k4KeivWq3eYgsjRnRncRFMWvmqN2giVJWbDvnfk4xhkbPEm3lggXjWU+qQ==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@google-cloud/monitoring/-/monitoring-3.0.4.tgz", + "integrity": "sha512-TvJs7CgxvTPqPfIY1avzdavhUhFmf4MRS+tzs/nomyfwqLtTGfoahyDSUal161HtbBbTS7DUrDPoAO3Sr9Hlag==", "dependencies": { - "google-gax": "^3.5.2" + "google-gax": "^3.5.8" }, "engines": { "node": ">=12.0.0" @@ -160,9 +193,9 @@ } }, "node_modules/@google-cloud/storage": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-6.7.0.tgz", - "integrity": "sha512-iEit3dvUhGQV3pPC8aci/Y+F6K2QJ/UvcXhymj8gnO8IYQfZSZvFf361yX4BWNUlbHzanUQVQdF9RvgEM8fwpw==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-6.11.0.tgz", + "integrity": "sha512-p5VX5K2zLTrMXlKdS1CiQNkKpygyn7CBFm5ZvfhVj6+7QUsjWvYx9YDMkYXdarZ6JDt4cxiu451y9QUIH82ZTw==", "dependencies": { "@google-cloud/paginator": "^3.0.7", "@google-cloud/projectify": "^3.0.0", @@ -207,9 +240,9 @@ } }, "node_modules/@grpc/grpc-js": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.7.3.tgz", - "integrity": "sha512-H9l79u4kJ2PVSxUNA08HMYAnUBLj9v6KjYQ7SQ71hOZcEXhShE/y5iQCesP8+6/Ik/7i2O0a10bPquIcYfufog==", + "version": "1.8.15", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.15.tgz", + "integrity": "sha512-H2Bu/w6+oQ58DsRbQol66ERBk3V5ZIak/z/MDx0T4EgDnJWps807I6BvTjq0v6UvZtOcLO+ur+Q9wvniqu3OJA==", "dependencies": { "@grpc/proto-loader": "^0.7.0", "@types/node": ">=12.12.47" @@ -219,15 +252,15 @@ } }, "node_modules/@grpc/proto-loader": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.3.tgz", - "integrity": "sha512-5dAvoZwna2Py3Ef96Ux9jIkp3iZ62TUsV00p3wVBPNX5K178UbNi8Q7gQVqwXT1Yq9RejIGG9G2IPEo93T6RcA==", + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.7.tgz", + "integrity": "sha512-1TIeXOi8TuSCQprPItwoMymZXxWT0CPxUhkrkeCUH+D8U7QDwQ6b7SUz2MaLuWM2llT+J/TVFLmQI5KtML3BhQ==", "dependencies": { "@types/long": "^4.0.1", "lodash.camelcase": "^4.3.0", "long": "^4.0.0", "protobufjs": "^7.0.0", - "yargs": "^16.2.0" + "yargs": "^17.7.2" }, "bin": { "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" @@ -237,9 +270,9 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", - "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -269,6 +302,17 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "node_modules/@jsdoc/salty": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.5.tgz", + "integrity": "sha512-TfRP53RqunNe2HBobVBJ0VLhK1HbfvBYeTC1ahnN64PWvyYyGebmMiPkuwvD9fpw2ZbkoPb8Q7mwy0aR8Z9rvw==", + "dependencies": { + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=v12.0.0" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -403,9 +447,9 @@ } }, "node_modules/@opencensus/exporter-stackdriver/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -495,6 +539,15 @@ "node": ">= 10" } }, + "node_modules/@types/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", + "dependencies": { + "@types/minimatch": "^5.1.2", + "@types/node": "*" + } + }, "node_modules/@types/linkify-it": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", @@ -519,10 +572,24 @@ "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" + }, "node_modules/@types/node": { - "version": "18.11.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.10.tgz", - "integrity": "sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ==" + "version": "20.3.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.1.tgz", + "integrity": "sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==" + }, + "node_modules/@types/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==", + "dependencies": { + "@types/glob": "*", + "@types/node": "*" + } }, "node_modules/abort-controller": { "version": "3.0.0", @@ -548,9 +615,9 @@ } }, "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", + "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", "bin": { "acorn": "bin/acorn" }, @@ -826,13 +893,16 @@ "integrity": "sha512-gVnX5ySMULvwYL2ykZQnP4UK4nIK7ftG6z015drJyOFgWpsqXt1Hcq4fMyPwM8LLsxfgfYKLiZi288xuTfmZBQ==" }, "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dependencies": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/color-convert": { @@ -879,9 +949,9 @@ } }, "node_modules/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==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "engines": { "node": ">= 0.6" } @@ -923,9 +993,9 @@ } }, "node_modules/data-uri-to-buffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", - "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", "engines": { "node": ">= 12" } @@ -1175,13 +1245,16 @@ } }, "node_modules/eslint": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.29.0.tgz", - "integrity": "sha512-isQ4EEiyUjZFbEKvEGJKKGBwXtvXX+zJbkVKCgTuB9t/+jUBcy8avhkEwWJecI15BkRkOYmvIM5ynbhRjEkoeg==", + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz", + "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.11.6", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.43.0", + "@humanwhocodes/config-array": "^0.11.10", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", @@ -1190,24 +1263,22 @@ "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.15.0", - "grapheme-splitter": "^1.0.4", + "globals": "^13.19.0", + "graphemer": "^1.4.0", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -1215,7 +1286,6 @@ "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" @@ -1243,9 +1313,9 @@ } }, "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -1253,51 +1323,30 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", "dependencies": { "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1319,9 +1368,9 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -1475,9 +1524,9 @@ "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==" }, "node_modules/fastq": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz", - "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -1620,9 +1669,9 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/gaxios": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.2.tgz", - "integrity": "sha512-TjtV2AJOZoMQqRYoy5eM8cCQogYwazWNYLQ72QB0kwa6vHHruYkGmhhyrlzbmgNHK1dNnuP2WSH81urfzyN2Og==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.1.0.tgz", + "integrity": "sha512-aezGIjb+/VfsJtIcHGcBSerNEDdfdHeMros+RbYbGpmonKWQCOVOes0LVZhn1lDtIgq55qq0HaxymIoae3Fl/A==", "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^5.0.0", @@ -1634,9 +1683,9 @@ } }, "node_modules/gaxios/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -1680,9 +1729,9 @@ } }, "node_modules/gcp-metadata/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -1707,12 +1756,13 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" }, "funding": { @@ -1720,9 +1770,9 @@ } }, "node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1758,9 +1808,9 @@ } }, "node_modules/glob/node_modules/minimatch": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.1.tgz", - "integrity": "sha512-362NP+zlprccbEt/SkxKfRMHnNY85V74mVnpUpNyr3F35covl09Kec7/sEFLt3RA4oXmewtoaanoIf67SE5Y5g==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -1769,9 +1819,9 @@ } }, "node_modules/globals": { - "version": "13.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", - "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -1784,16 +1834,16 @@ } }, "node_modules/google-auth-library": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.7.0.tgz", - "integrity": "sha512-1M0NG5VDIvJZEnstHbRdckLZESoJwguinwN8Dhae0j2ZKIQFIV63zxm6Fo6nM4xkgqUr2bbMtV5Dgo+Hy6oo0Q==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.8.0.tgz", + "integrity": "sha512-0iJn7IDqObDG5Tu9Tn2WemmJ31ksEa96IyK0J0OZCpTh6CrC6FrattwKX87h3qKVuprCJpdOGKc1Xi8V0kMh8Q==", "dependencies": { "arrify": "^2.0.0", "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "fast-text-encoding": "^1.0.0", "gaxios": "^5.0.0", - "gcp-metadata": "^5.0.0", + "gcp-metadata": "^5.2.0", "gtoken": "^6.1.0", "jws": "^4.0.0", "lru-cache": "^6.0.0" @@ -1803,9 +1853,9 @@ } }, "node_modules/google-auth-library/node_modules/gcp-metadata": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.0.1.tgz", - "integrity": "sha512-jiRJ+Fk7e8FH68Z6TLaqwea307OktJpDjmYnU7/li6ziwvVvU2RlrCyQo5vkdeP94chm0kcSCOOszvmuaioq3g==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.2.0.tgz", + "integrity": "sha512-aFhhvvNycky2QyhG+dcfEdHBF0FRbYcf39s6WNHUDysKSrbJ5vuFbjydxBcmewtXeV248GP8dWT3ByPNxsyHCw==", "dependencies": { "gaxios": "^5.0.0", "json-bigint": "^1.0.0" @@ -1815,13 +1865,14 @@ } }, "node_modules/google-gax": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.5.2.tgz", - "integrity": "sha512-AyP53w0gHcWlzxm+jSgqCR3Xu4Ld7EpSjhtNBnNhzwwWaIUyphH9kBGNIEH+i4UGkTUXOY29K/Re8EiAvkBRGw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.6.0.tgz", + "integrity": "sha512-2fyb61vWxUonHiArRNJQmE4tx5oY1ni8VPo08fzII409vDSCWG7apDX4qNOQ2GXXT82gLBn3d3P1Dydh7pWjyw==", "dependencies": { - "@grpc/grpc-js": "~1.7.0", + "@grpc/grpc-js": "~1.8.0", "@grpc/proto-loader": "^0.7.0", "@types/long": "^4.0.0", + "@types/rimraf": "^3.0.2", "abort-controller": "^3.0.0", "duplexify": "^4.0.0", "fast-text-encoding": "^1.0.3", @@ -1830,8 +1881,8 @@ "node-fetch": "^2.6.1", "object-hash": "^3.0.0", "proto3-json-serializer": "^1.0.0", - "protobufjs": "7.1.2", - "protobufjs-cli": "1.0.2", + "protobufjs": "7.2.3", + "protobufjs-cli": "1.1.1", "retry-request": "^5.0.0" }, "bin": { @@ -1843,9 +1894,9 @@ } }, "node_modules/google-gax/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -1965,9 +2016,9 @@ } }, "node_modules/googleapis-common/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -2053,9 +2104,9 @@ } }, "node_modules/googleapis/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -2072,14 +2123,14 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, "node_modules/gtoken": { @@ -2114,6 +2165,17 @@ "node": ">=8" } }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -2177,9 +2239,9 @@ } }, "node_modules/ignore": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz", - "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, "engines": { "node": ">= 4" @@ -2300,16 +2362,6 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, - "node_modules/js-sdsl": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", - "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -2331,11 +2383,12 @@ } }, "node_modules/jsdoc": { - "version": "3.6.11", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.11.tgz", - "integrity": "sha512-8UCU0TYeIYD9KeLzEcAu2q8N/mx9O3phAGl32nmHlE0LpaJL71mMkP4d+QE5zWfNt50qheHtOZ0qoxVrsX5TUg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", + "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", "dependencies": { - "@babel/parser": "^7.9.4", + "@babel/parser": "^7.20.15", + "@jsdoc/salty": "^0.2.1", "@types/markdown-it": "^12.2.3", "bluebird": "^3.7.2", "catharsis": "^0.9.0", @@ -2348,7 +2401,6 @@ "mkdirp": "^1.0.4", "requizzle": "^0.2.3", "strip-json-comments": "^3.1.0", - "taffydb": "2.6.2", "underscore": "~1.13.2" }, "bin": { @@ -2516,18 +2568,18 @@ } }, "node_modules/markdown-it-anchor": { - "version": "8.6.5", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.5.tgz", - "integrity": "sha512-PI1qEHHkTNWT+X6Ip9w+paonfIQ+QZP9sCeMYi47oqhH+EsW8CrJ8J7CzV19QVOj6il8ATGbK2nTECj22ZHGvQ==", + "version": "8.6.7", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", + "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", "peerDependencies": { "@types/markdown-it": "*", "markdown-it": "*" } }, "node_modules/marked": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.3.tgz", - "integrity": "sha512-slWRdJkbTZ+PjkyJnE30Uid64eHwbwa1Q25INCAYfZlK4o6ylagBy/Le9eWntqJFoFT93ikUKMv47GZ4gTwHkw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", "bin": { "marked": "bin/marked.js" }, @@ -2603,9 +2655,9 @@ } }, "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2726,9 +2778,9 @@ } }, "node_modules/node-fetch": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.0.tgz", - "integrity": "sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz", + "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==", "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -2759,9 +2811,9 @@ } }, "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2900,9 +2952,9 @@ } }, "node_modules/proto3-json-serializer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.1.0.tgz", - "integrity": "sha512-SjXwUWe/vANGs/mJJTbw5++7U67nwsymg7qsoPtw6GiXqw3kUy8ByojrlEdVE2efxAdKreX8WkDafxvYW95ZQg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.1.1.tgz", + "integrity": "sha512-AwAuY4g9nxx0u52DnSMkqqgyLHaW/XaPLtaAo3y/ZCfeaQB/g4YDH4kb8Wc/mWzWvu0YjOznVnfn373MVZZrgw==", "dependencies": { "protobufjs": "^7.0.0" }, @@ -2911,9 +2963,9 @@ } }, "node_modules/protobufjs": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.1.2.tgz", - "integrity": "sha512-4ZPTPkXCdel3+L81yw3dG6+Kq3umdWKh7Dc7GW/CpNk4SX3hK58iPCWeCyhVTDrbkNeKrYNZ7EojM5WDaEWTLQ==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.3.tgz", + "integrity": "sha512-TtpvOqwB5Gdz/PQmOjgsrGH1nHjAQVCN7JG4A6r1sXRWESL5rNMAiRcBQlCAdKxZcAbstExQePYG8xof/JVRgg==", "hasInstallScript": true, "dependencies": { "@protobufjs/aspromise": "^1.1.2", @@ -2934,16 +2986,16 @@ } }, "node_modules/protobufjs-cli": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.0.2.tgz", - "integrity": "sha512-cz9Pq9p/Zs7okc6avH20W7QuyjTclwJPgqXG11jNaulfS3nbVisID8rC+prfgq0gbZE0w9LBFd1OKFF03kgFzg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.1.1.tgz", + "integrity": "sha512-VPWMgIcRNyQwWUv8OLPyGQ/0lQY/QTQAVN5fh+XzfDwsVw1FZ2L3DM/bcBf8WPiRz2tNpaov9lPZfNcmNo6LXA==", "dependencies": { "chalk": "^4.0.0", "escodegen": "^1.13.0", "espree": "^9.0.0", "estraverse": "^5.1.0", "glob": "^8.0.0", - "jsdoc": "^3.6.3", + "jsdoc": "^4.0.0", "minimist": "^1.2.0", "semver": "^7.1.2", "tmp": "^0.2.1", @@ -2961,9 +3013,9 @@ } }, "node_modules/protobufjs/node_modules/long": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", - "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" }, "node_modules/proxy-addr": { "version": "2.0.7", @@ -2997,9 +3049,9 @@ } }, "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==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true, "engines": { "node": ">=6" @@ -3062,9 +3114,9 @@ } }, "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==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -3074,18 +3126,6 @@ "node": ">= 6" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -3228,9 +3268,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", + "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -3440,15 +3480,10 @@ "node": ">=8" } }, - "node_modules/taffydb": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", - "integrity": "sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA==" - }, "node_modules/teeny-request": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-8.0.2.tgz", - "integrity": "sha512-34pe0a4zASseXZCKdeTiIZqSKA8ETHb1EwItZr01PAR3CLPojeAKgSjzeNS4373gi59hNulyDrPKEbh2zO9sCg==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-8.0.3.tgz", + "integrity": "sha512-jJZpA5He2y52yUhA7pyAGZlgQpcB+xLjcN0eUFxr9c8hP/H7uOXbBNVo/O0C/xVfJLJs680jvkFgVJEEvk9+ww==", "dependencies": { "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", @@ -3461,9 +3496,9 @@ } }, "node_modules/teeny-request/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -3702,28 +3737,28 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dependencies": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yocto-queue": { @@ -3740,20 +3775,35 @@ }, "dependencies": { "@babel/parser": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", - "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==" + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", + "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==" + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true }, "@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", + "espree": "^9.5.2", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -3761,6 +3811,12 @@ "strip-json-comments": "^3.1.1" } }, + "@eslint/js": { + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz", + "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", + "dev": true + }, "@google-cloud/common": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-4.0.3.tgz", @@ -3778,9 +3834,9 @@ } }, "@google-cloud/logging": { - "version": "10.3.2", - "resolved": "https://registry.npmjs.org/@google-cloud/logging/-/logging-10.3.2.tgz", - "integrity": "sha512-asINa/B1iiuEGjJP2O973YcpOAwHstLI022oC+pVBzpnifjZgtLwjCuDJlhRVuOdrYHr3vaAGaRxHEN2VdX6Ng==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@google-cloud/logging/-/logging-10.5.0.tgz", + "integrity": "sha512-XmlNs6B8lDZvFwFB5M55g9ch873AA2rXSuFOczQ3FOAzuyd/qksf18suFJfcrLMu8lYSr3SQhTE45FlXz4p9pg==", "requires": { "@google-cloud/common": "^4.0.0", "@google-cloud/paginator": "^4.0.0", @@ -3792,7 +3848,7 @@ "extend": "^3.0.2", "gcp-metadata": "^4.0.0", "google-auth-library": "^8.0.2", - "google-gax": "^3.5.2", + "google-gax": "^3.5.8", "on-finished": "^2.3.0", "pumpify": "^2.0.1", "stream-events": "^1.0.5", @@ -3809,11 +3865,11 @@ } }, "@google-cloud/monitoring": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@google-cloud/monitoring/-/monitoring-3.0.3.tgz", - "integrity": "sha512-SIm1EUYwrb0HKvjdc+1LyL2naGU+k4KeivWq3eYgsjRnRncRFMWvmqN2giVJWbDvnfk4xhkbPEm3lggXjWU+qQ==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@google-cloud/monitoring/-/monitoring-3.0.4.tgz", + "integrity": "sha512-TvJs7CgxvTPqPfIY1avzdavhUhFmf4MRS+tzs/nomyfwqLtTGfoahyDSUal161HtbBbTS7DUrDPoAO3Sr9Hlag==", "requires": { - "google-gax": "^3.5.2" + "google-gax": "^3.5.8" } }, "@google-cloud/paginator": { @@ -3836,9 +3892,9 @@ "integrity": "sha512-z1CjRjtQyBOYL+5Qr9DdYIfrdLBe746jRTYfaYU6MeXkqp7UfYs/jX16lFFVzZ7PGEJvqZNqYUEtb1mvDww4pA==" }, "@google-cloud/storage": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-6.7.0.tgz", - "integrity": "sha512-iEit3dvUhGQV3pPC8aci/Y+F6K2QJ/UvcXhymj8gnO8IYQfZSZvFf361yX4BWNUlbHzanUQVQdF9RvgEM8fwpw==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-6.11.0.tgz", + "integrity": "sha512-p5VX5K2zLTrMXlKdS1CiQNkKpygyn7CBFm5ZvfhVj6+7QUsjWvYx9YDMkYXdarZ6JDt4cxiu451y9QUIH82ZTw==", "requires": { "@google-cloud/paginator": "^3.0.7", "@google-cloud/projectify": "^3.0.0", @@ -3876,30 +3932,30 @@ } }, "@grpc/grpc-js": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.7.3.tgz", - "integrity": "sha512-H9l79u4kJ2PVSxUNA08HMYAnUBLj9v6KjYQ7SQ71hOZcEXhShE/y5iQCesP8+6/Ik/7i2O0a10bPquIcYfufog==", + "version": "1.8.15", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.15.tgz", + "integrity": "sha512-H2Bu/w6+oQ58DsRbQol66ERBk3V5ZIak/z/MDx0T4EgDnJWps807I6BvTjq0v6UvZtOcLO+ur+Q9wvniqu3OJA==", "requires": { "@grpc/proto-loader": "^0.7.0", "@types/node": ">=12.12.47" } }, "@grpc/proto-loader": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.3.tgz", - "integrity": "sha512-5dAvoZwna2Py3Ef96Ux9jIkp3iZ62TUsV00p3wVBPNX5K178UbNi8Q7gQVqwXT1Yq9RejIGG9G2IPEo93T6RcA==", + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.7.tgz", + "integrity": "sha512-1TIeXOi8TuSCQprPItwoMymZXxWT0CPxUhkrkeCUH+D8U7QDwQ6b7SUz2MaLuWM2llT+J/TVFLmQI5KtML3BhQ==", "requires": { "@types/long": "^4.0.1", "lodash.camelcase": "^4.3.0", "long": "^4.0.0", "protobufjs": "^7.0.0", - "yargs": "^16.2.0" + "yargs": "^17.7.2" } }, "@humanwhocodes/config-array": { - "version": "0.11.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", - "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -3919,6 +3975,14 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "@jsdoc/salty": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.5.tgz", + "integrity": "sha512-TfRP53RqunNe2HBobVBJ0VLhK1HbfvBYeTC1ahnN64PWvyYyGebmMiPkuwvD9fpw2ZbkoPb8Q7mwy0aR8Z9rvw==", + "requires": { + "lodash": "^4.17.21" + } + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -4022,9 +4086,9 @@ } }, "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "requires": { "whatwg-url": "^5.0.0" } @@ -4099,6 +4163,15 @@ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" }, + "@types/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", + "requires": { + "@types/minimatch": "^5.1.2", + "@types/node": "*" + } + }, "@types/linkify-it": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", @@ -4123,10 +4196,24 @@ "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" }, + "@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" + }, "@types/node": { - "version": "18.11.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.10.tgz", - "integrity": "sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ==" + "version": "20.3.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.1.tgz", + "integrity": "sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==" + }, + "@types/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==", + "requires": { + "@types/glob": "*", + "@types/node": "*" + } }, "abort-controller": { "version": "3.0.0", @@ -4146,9 +4233,9 @@ } }, "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", + "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==" }, "acorn-jsx": { "version": "5.3.2", @@ -4350,12 +4437,12 @@ "integrity": "sha512-gVnX5ySMULvwYL2ykZQnP4UK4nIK7ftG6z015drJyOFgWpsqXt1Hcq4fMyPwM8LLsxfgfYKLiZi288xuTfmZBQ==" }, "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "requires": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, @@ -4394,9 +4481,9 @@ } }, "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==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" }, "continuation-local-storage": { "version": "3.2.1", @@ -4429,9 +4516,9 @@ } }, "data-uri-to-buffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", - "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==" }, "debug": { "version": "4.3.4", @@ -4613,13 +4700,16 @@ } }, "eslint": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.29.0.tgz", - "integrity": "sha512-isQ4EEiyUjZFbEKvEGJKKGBwXtvXX+zJbkVKCgTuB9t/+jUBcy8avhkEwWJecI15BkRkOYmvIM5ynbhRjEkoeg==", + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz", + "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.11.6", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.43.0", + "@humanwhocodes/config-array": "^0.11.10", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", @@ -4628,24 +4718,22 @@ "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.15.0", - "grapheme-splitter": "^1.0.4", + "globals": "^13.19.0", + "graphemer": "^1.4.0", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -4653,7 +4741,6 @@ "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" @@ -4667,45 +4754,28 @@ "requires": {} }, "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==" }, "espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", "requires": { "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.1" } }, "esprima": { @@ -4714,9 +4784,9 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "requires": { "estraverse": "^5.1.0" @@ -4847,9 +4917,9 @@ "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==" }, "fastq": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz", - "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -4957,9 +5027,9 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "gaxios": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.2.tgz", - "integrity": "sha512-TjtV2AJOZoMQqRYoy5eM8cCQogYwazWNYLQ72QB0kwa6vHHruYkGmhhyrlzbmgNHK1dNnuP2WSH81urfzyN2Og==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.1.0.tgz", + "integrity": "sha512-aezGIjb+/VfsJtIcHGcBSerNEDdfdHeMros+RbYbGpmonKWQCOVOes0LVZhn1lDtIgq55qq0HaxymIoae3Fl/A==", "requires": { "extend": "^3.0.2", "https-proxy-agent": "^5.0.0", @@ -4968,9 +5038,9 @@ }, "dependencies": { "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "requires": { "whatwg-url": "^5.0.0" } @@ -4999,9 +5069,9 @@ } }, "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "requires": { "whatwg-url": "^5.0.0" } @@ -5014,19 +5084,20 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" } }, "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5044,9 +5115,9 @@ } }, "minimatch": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.1.tgz", - "integrity": "sha512-362NP+zlprccbEt/SkxKfRMHnNY85V74mVnpUpNyr3F35covl09Kec7/sEFLt3RA4oXmewtoaanoIf67SE5Y5g==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "requires": { "brace-expansion": "^2.0.1" } @@ -5063,34 +5134,34 @@ } }, "globals": { - "version": "13.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", - "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "requires": { "type-fest": "^0.20.2" } }, "google-auth-library": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.7.0.tgz", - "integrity": "sha512-1M0NG5VDIvJZEnstHbRdckLZESoJwguinwN8Dhae0j2ZKIQFIV63zxm6Fo6nM4xkgqUr2bbMtV5Dgo+Hy6oo0Q==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.8.0.tgz", + "integrity": "sha512-0iJn7IDqObDG5Tu9Tn2WemmJ31ksEa96IyK0J0OZCpTh6CrC6FrattwKX87h3qKVuprCJpdOGKc1Xi8V0kMh8Q==", "requires": { "arrify": "^2.0.0", "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "fast-text-encoding": "^1.0.0", "gaxios": "^5.0.0", - "gcp-metadata": "^5.0.0", + "gcp-metadata": "^5.2.0", "gtoken": "^6.1.0", "jws": "^4.0.0", "lru-cache": "^6.0.0" }, "dependencies": { "gcp-metadata": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.0.1.tgz", - "integrity": "sha512-jiRJ+Fk7e8FH68Z6TLaqwea307OktJpDjmYnU7/li6ziwvVvU2RlrCyQo5vkdeP94chm0kcSCOOszvmuaioq3g==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.2.0.tgz", + "integrity": "sha512-aFhhvvNycky2QyhG+dcfEdHBF0FRbYcf39s6WNHUDysKSrbJ5vuFbjydxBcmewtXeV248GP8dWT3ByPNxsyHCw==", "requires": { "gaxios": "^5.0.0", "json-bigint": "^1.0.0" @@ -5099,13 +5170,14 @@ } }, "google-gax": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.5.2.tgz", - "integrity": "sha512-AyP53w0gHcWlzxm+jSgqCR3Xu4Ld7EpSjhtNBnNhzwwWaIUyphH9kBGNIEH+i4UGkTUXOY29K/Re8EiAvkBRGw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.6.0.tgz", + "integrity": "sha512-2fyb61vWxUonHiArRNJQmE4tx5oY1ni8VPo08fzII409vDSCWG7apDX4qNOQ2GXXT82gLBn3d3P1Dydh7pWjyw==", "requires": { - "@grpc/grpc-js": "~1.7.0", + "@grpc/grpc-js": "~1.8.0", "@grpc/proto-loader": "^0.7.0", "@types/long": "^4.0.0", + "@types/rimraf": "^3.0.2", "abort-controller": "^3.0.0", "duplexify": "^4.0.0", "fast-text-encoding": "^1.0.3", @@ -5114,15 +5186,15 @@ "node-fetch": "^2.6.1", "object-hash": "^3.0.0", "proto3-json-serializer": "^1.0.0", - "protobufjs": "7.1.2", - "protobufjs-cli": "1.0.2", + "protobufjs": "7.2.3", + "protobufjs-cli": "1.1.1", "retry-request": "^5.0.0" }, "dependencies": { "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "requires": { "whatwg-url": "^5.0.0" } @@ -5193,9 +5265,9 @@ } }, "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "requires": { "whatwg-url": "^5.0.0" } @@ -5262,9 +5334,9 @@ } }, "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "requires": { "whatwg-url": "^5.0.0" } @@ -5277,14 +5349,14 @@ } }, "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, "gtoken": { @@ -5310,6 +5382,11 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -5355,9 +5432,9 @@ } }, "ignore": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz", - "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true }, "import-fresh": { @@ -5442,12 +5519,6 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, - "js-sdsl": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", - "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", - "dev": true - }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -5466,11 +5537,12 @@ } }, "jsdoc": { - "version": "3.6.11", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.11.tgz", - "integrity": "sha512-8UCU0TYeIYD9KeLzEcAu2q8N/mx9O3phAGl32nmHlE0LpaJL71mMkP4d+QE5zWfNt50qheHtOZ0qoxVrsX5TUg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", + "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", "requires": { - "@babel/parser": "^7.9.4", + "@babel/parser": "^7.20.15", + "@jsdoc/salty": "^0.2.1", "@types/markdown-it": "^12.2.3", "bluebird": "^3.7.2", "catharsis": "^0.9.0", @@ -5483,7 +5555,6 @@ "mkdirp": "^1.0.4", "requizzle": "^0.2.3", "strip-json-comments": "^3.1.0", - "taffydb": "2.6.2", "underscore": "~1.13.2" }, "dependencies": { @@ -5620,15 +5691,15 @@ } }, "markdown-it-anchor": { - "version": "8.6.5", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.5.tgz", - "integrity": "sha512-PI1qEHHkTNWT+X6Ip9w+paonfIQ+QZP9sCeMYi47oqhH+EsW8CrJ8J7CzV19QVOj6il8ATGbK2nTECj22ZHGvQ==", + "version": "8.6.7", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", + "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", "requires": {} }, "marked": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.3.tgz", - "integrity": "sha512-slWRdJkbTZ+PjkyJnE30Uid64eHwbwa1Q25INCAYfZlK4o6ylagBy/Le9eWntqJFoFT93ikUKMv47GZ4gTwHkw==" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==" }, "mdurl": { "version": "1.0.1", @@ -5677,9 +5748,9 @@ } }, "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" }, "mkdirp": { "version": "0.5.6", @@ -5765,9 +5836,9 @@ "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" }, "node-fetch": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.0.tgz", - "integrity": "sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz", + "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==", "requires": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -5785,9 +5856,9 @@ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" }, "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" }, "on-finished": { "version": "2.4.1", @@ -5884,17 +5955,17 @@ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" }, "proto3-json-serializer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.1.0.tgz", - "integrity": "sha512-SjXwUWe/vANGs/mJJTbw5++7U67nwsymg7qsoPtw6GiXqw3kUy8ByojrlEdVE2efxAdKreX8WkDafxvYW95ZQg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.1.1.tgz", + "integrity": "sha512-AwAuY4g9nxx0u52DnSMkqqgyLHaW/XaPLtaAo3y/ZCfeaQB/g4YDH4kb8Wc/mWzWvu0YjOznVnfn373MVZZrgw==", "requires": { "protobufjs": "^7.0.0" } }, "protobufjs": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.1.2.tgz", - "integrity": "sha512-4ZPTPkXCdel3+L81yw3dG6+Kq3umdWKh7Dc7GW/CpNk4SX3hK58iPCWeCyhVTDrbkNeKrYNZ7EojM5WDaEWTLQ==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.3.tgz", + "integrity": "sha512-TtpvOqwB5Gdz/PQmOjgsrGH1nHjAQVCN7JG4A6r1sXRWESL5rNMAiRcBQlCAdKxZcAbstExQePYG8xof/JVRgg==", "requires": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -5911,23 +5982,23 @@ }, "dependencies": { "long": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", - "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" } } }, "protobufjs-cli": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.0.2.tgz", - "integrity": "sha512-cz9Pq9p/Zs7okc6avH20W7QuyjTclwJPgqXG11jNaulfS3nbVisID8rC+prfgq0gbZE0w9LBFd1OKFF03kgFzg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.1.1.tgz", + "integrity": "sha512-VPWMgIcRNyQwWUv8OLPyGQ/0lQY/QTQAVN5fh+XzfDwsVw1FZ2L3DM/bcBf8WPiRz2tNpaov9lPZfNcmNo6LXA==", "requires": { "chalk": "^4.0.0", "escodegen": "^1.13.0", "espree": "^9.0.0", "estraverse": "^5.1.0", "glob": "^8.0.0", - "jsdoc": "^3.6.3", + "jsdoc": "^4.0.0", "minimist": "^1.2.0", "semver": "^7.1.2", "tmp": "^0.2.1", @@ -5963,9 +6034,9 @@ } }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true }, "qs": { @@ -5999,21 +6070,15 @@ } }, "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==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -6102,9 +6167,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", + "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", "requires": { "lru-cache": "^6.0.0" } @@ -6270,15 +6335,10 @@ "has-flag": "^4.0.0" } }, - "taffydb": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", - "integrity": "sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA==" - }, "teeny-request": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-8.0.2.tgz", - "integrity": "sha512-34pe0a4zASseXZCKdeTiIZqSKA8ETHb1EwItZr01PAR3CLPojeAKgSjzeNS4373gi59hNulyDrPKEbh2zO9sCg==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-8.0.3.tgz", + "integrity": "sha512-jJZpA5He2y52yUhA7pyAGZlgQpcB+xLjcN0eUFxr9c8hP/H7uOXbBNVo/O0C/xVfJLJs680jvkFgVJEEvk9+ww==", "requires": { "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", @@ -6288,9 +6348,9 @@ }, "dependencies": { "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "requires": { "whatwg-url": "^5.0.0" } @@ -6463,23 +6523,23 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "requires": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" } }, "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==" + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" }, "yocto-queue": { "version": "0.1.0", diff --git a/cloudrun-malware-scanner/updateCvdMirror.sh b/cloudrun-malware-scanner/updateCvdMirror.sh index 6aec291..0bbbf2d 100755 --- a/cloudrun-malware-scanner/updateCvdMirror.sh +++ b/cloudrun-malware-scanner/updateCvdMirror.sh @@ -23,6 +23,12 @@ CMD=$(basename "$0") +export PATH="$PATH:$HOME/.local/bin" # add pipx locations to path. +if ! which cvdupdate >/dev/null ; then + echo "cvdupdate is not installed" >&2 + exit 1 +fi + CVD_MIRROR_BUCKET="$1" if [[ -z "${CVD_MIRROR_BUCKET}" ]] ; then echo "Usage: ${CMD} CVD_MIRROR_BUCKET_NAME" >&2 @@ -47,7 +53,7 @@ while ! { "${LOCKFILE_PATH}" \ --if-generation-match=0 2>/dev/null >/dev/null } -do +do # Lockfile exists - check that it has not expired. LOCK_EXPIRED_TIMESTAMP="$(date +%s --date="now - ${LOCKFILE_EXPIRY_MINS} minutes")" LOCKFILE_TIMESTAMP=$(gsutil -q cat "${LOCKFILE_PATH}" 2>/dev/null ) @@ -60,7 +66,7 @@ do echo "${CMD} Waiting for ${LOCKFILE_PATH}" sleep 30 fi -done +done echo "${CMD} successfully created ${LOCKFILE_PATH}" # Ensure lockfile is removed on exit. @@ -69,8 +75,8 @@ trap "echo ${CMD} removing ${LOCKFILE_PATH} ; gsutil -q rm ${LOCKFILE_PATH}" EXI # Copy the existing CVDs from GCS to a local directory. # ignore errors as it implies empty db in mirror (ie first run). mkdir -p ./cvds -echo "${CMD} Downloading CVD mirror from gs://${CVD_MIRROR_BUCKET}/cvds" -gsutil -m -q rsync -d -c -r -x cvds/log "gs://${CVD_MIRROR_BUCKET}/cvds" ./cvds +echo "${CMD} Downloading CVD mirror from gs://${CVD_MIRROR_BUCKET}/cvds/" +gsutil -m -q rsync -d -c -r -x cvds/log "gs://${CVD_MIRROR_BUCKET}/cvds/" ./cvds set -o errexit @@ -87,7 +93,7 @@ cvdupdate update -V -c ./cvds/config.json cat ./cvds/log/*.log # Push any updated databases back to GCS -echo "${CMD} Updating CVD mirror at gs://${CVD_MIRROR_BUCKET}/cvds" -gsutil -m -q rsync -d -c -r -x '.*\.log' ./cvds "gs://${CVD_MIRROR_BUCKET}/cvds" +echo "${CMD} Updating CVD mirror at gs://${CVD_MIRROR_BUCKET}/cvds/" +gsutil -m -q rsync -d -c -r -x '.*\.log' ./cvds "gs://${CVD_MIRROR_BUCKET}/cvds/" echo "${CMD} completed" From 15ff912affe61e6cdd88cad5cc6fbb6c0d4ce4b4 Mon Sep 17 00:00:00 2001 From: nielm Date: Tue, 20 Jun 2023 14:35:38 +0200 Subject: [PATCH 10/11] Increase version number, add user-agent --- cloudrun-malware-scanner/package.json | 2 +- cloudrun-malware-scanner/server.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cloudrun-malware-scanner/package.json b/cloudrun-malware-scanner/package.json index 3bce99e..190c461 100644 --- a/cloudrun-malware-scanner/package.json +++ b/cloudrun-malware-scanner/package.json @@ -1,6 +1,6 @@ { "name": "gcs-malware-scanner", - "version": "2.0.0", + "version": "2.1.0", "description": "Service to scan GCS documents for the malware and move the analyzed documents to appropriate buckets", "main": "index.js", "scripts": { diff --git a/cloudrun-malware-scanner/server.js b/cloudrun-malware-scanner/server.js index 4d40fb9..f2c0f22 100644 --- a/cloudrun-malware-scanner/server.js +++ b/cloudrun-malware-scanner/server.js @@ -71,7 +71,7 @@ const BUCKET_CONFIG = { const app = express(); app.use(express.json()); const scanner = clamd.createScanner(CLAMD_HOST, CLAMD_PORT); -const storage = new Storage(); +const storage = new Storage({userAgent: `${pkgJson.name}/${pkgJson.version}`}); /** * Route that is invoked by Cloud Run when a malware scan is requested From 06dede025eb502df85902b6e64021c350370c4a4 Mon Sep 17 00:00:00 2001 From: nielm Date: Tue, 20 Jun 2023 14:38:08 +0200 Subject: [PATCH 11/11] Update README --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index f1ee4b4..767df10 100755 --- a/README.md +++ b/README.md @@ -30,6 +30,8 @@ Run and Eventarc. * 2022-06-07 v1.7.0 Fix issue #32 where clamav cannot update itself on container start * 2022-11-25 v2.0.0 Resolve #35 where ClamAV update servers blacklist cloud run IPs. adds a local cache of ClamAV definition files which is updated on a schedule. +* 2023-06-20 v2.1.0 Resolve #46 where docker build failed, and #50 where pip3 + installs failed ## Upgrading from v1.x to v2.x